Согласно документации RegExp, мы должны использовать регулярные выражения "JavaScript" (Perl 5): Ecma Specification. Какой шаблон вы используете для проверки электронной почты?
Подтвердите адрес электронной почты в Dart?
Ответ 1
Я бы порекомендовал всем стандартизовать спецификацию проверки электронной почты HTML5, которая отличается от RFC822, запретив несколько очень редко используемых функций адресов электронной почты (например, комментарии!), Но может быть распознана с помощью регулярных выражений.
Здесь раздел проверки электронной почты в спецификации HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state -% 28type = электронная почта% 29
И это регулярное выражение:
^[a-zA-Z0-9.!#$%&'*+/=?^_'{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,253}[a-zA-Z0-9])?)*$
Ответ 2
Для этого простого регулярного выражения работает очень хорошо.
var email = "[email protected]"
bool emailValid = RegExp(r"^[a-zA-Z0-9.][email protected][a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email);
Ответ 3
Я использую этот шаблон: validate-email-address-in-javascript. (Удалите косую черту /
разделители и добавьте разделители Dart: r'
'
).
bool isEmail(String em) {
String p = r'^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
RegExp regExp = new RegExp(p);
return regExp.hasMatch(em);
}
РЕДАКТИРОВАТЬ:
Для получения дополнительной информации о проверке электронной почты, посмотрите на эти посты: dominicsayers.com и регулярно-expressions.info. Этот инструмент также может быть очень полезен: gskinner RegExr.
РЕДАКТИРОВАТЬ: Джастин есть лучший. Я использую шаблон, который он предложил.
Ответ 4
Лучший шаблон regEx, который я нашел, - это проверка адреса электронной почты RFC2822:
[a-z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_'{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
Взято из: regexr.com/2rhq7
Все остальные тесты, которые я проверял, помечают строку [email protected]
как положительную, что неверно.
Ответ 5
Правильный ответ 2019 года
Для правильной поддержки проверки электронной почты в Dart/Flutter см. пакет pub.dev email_validator
.
Источник: https://github.com/fredeil/email-validator.dart
_
Это правильно поддерживает:
- ДВУ [опционально]
- Международные домены [опционально]
- Отфильтрованные домены (например, [email protected])
- Адреса без домена (например, user @localhost)
Ответ 6
Подтверждение адреса электронной почты в Dart, следуйте регулярным выражениям:
bool validateEmail(String value) {
Pattern pattern =
r'^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
RegExp regex = new RegExp(pattern);
return (!regex.hasMatch(value)) ? false : true;
}
void main() {
print(validateEmail("[email protected]"));
}
Добавьте следующее регулярное выражение:
r'^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'
Ссылка: https://gist.github.com/aslamanver/3a3389b8ef88831128f0fa21393d70f0
Ответ 7
Я прибыл на эту страницу в поисках подтверждения электронной почты, но ни один из примеров regEx, найденных здесь, не прошел все мои тесты.
Поэтому я решил написать свой собственный regEx, адаптируя некоторые концепции из других ответов (стоя на плечах гигантов), и пока у него все хорошо:
^[a-z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_'{|}~-]+)*@(?:[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.)*[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.[a-zA-Z0-9]{2,}$
Ответ 8
Я пришел на эту страницу в поисках подтверждения электронной почты, но ни один из примеров, найденных здесь, не прошел все мои тесты.
Поэтому я решил написать свой собственный regEx, адаптируя некоторые концепции из других ответов (стоя на плечах гигантов), и пока у него все хорошо:
^[a-z0-9!#$%&'*+/=?^_'{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_'{|}~-]+)*@(?:[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.)*[a-zA-Z0-9][a-zA-Z0-9-]{0,253}\.[a-zA-Z0-9]{2,}$
Если вы обнаружите какие-либо проблемы с этим шаблоном, пожалуйста, дайте мне знать.
Ответ 9
Вот решение, которое я предпочитаю использовать:
static void alertWithOptions(
BuildContext context, String title, List<DialogDemoItem> items) {
_showDialogWithOptions<String>(
context: context,
child: SimpleDialog(
title: Text(title),
children: items,
));
}
static void alert(BuildContext context, String alertTitle,
[String alertBody,
Widget bodyWidget,
String actionTitle,
VoidCallback action]) {
if (alertBody == null) {
alertBody = "";
}
if (bodyWidget == null) {
bodyWidget = Text(alertBody);
}
_showDialog(alertTitle, bodyWidget, context, actionTitle, action);
}
// From: https://medium.com/@nils.backe/flutter-alert-dialogs-9b0bb9b01d28
static void _showDialog(String titleString, Widget bodyWidget,
BuildContext context, String actionTitle, VoidCallback action) {
List<Widget> actions = [];
String closeTitle;
if (action != null) {
actionTitle = actionTitle ?? 'OK';
closeTitle = 'Cancel';
actions.add(FlatButton(
child: Text(actionTitle),
onPressed: () {
Navigator.of(context).pop();
action();
},
));
} else {
closeTitle = 'Close';
}
actions.add(FlatButton(
child: Text(closeTitle),
onPressed: () {
Navigator.of(context).pop();
},
));
showDialog(
context: context,
barrierDismissible: false, // user must "Cancel" tap button!
builder: (BuildContext context) {
// return object of type Dialog
return AlertDialog(
title: Text(titleString),
content: bodyWidget,
actions: actions,
);
},
);
}
Вы можете, конечно, сделать его еще более общим, если хотите.
Ответ 10
Я видел эту страницу несколько раз, когда искал, и я придумал более простое регулярное выражение для дротика, которое могло бы помочь тем, кто зайдет на эту страницу позже.
вот регулярное выражение:
^[^@][email protected][^@]+\.[^@]+
так что в dart
вы можете использовать его как
RegExp(r'^[^@][email protected][^@]+\.[^@]+')
Он поддерживает только обычные электронные письма, но не без TLD. например, [email protected], но не me @localhost. Надеюсь, это поможет.