Подтвердите адрес электронной почты в Dart?

Согласно документации RegExp, мы должны использовать регулярные выражения "JavaScript" (Perl 5): Ecma Specification. Какой шаблон вы используете для проверки электронной почты?

Ответ 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. Надеюсь, это поможет.