web-dev-qa-db-fra.com

Valider l'adresse e-mail dans Dart?

Selon la documentation RegExp , nous devons utiliser JavaScript (Perl 5) expressions régulières: spécification ECMA . Quel modèle utilisez-vous pour la validation des e-mails?

24
Eric Lavoie

Je recommanderais à tout le monde de standardiser la spécification de validation des e-mails HTML5, qui diffère de la RFC822 en interdisant plusieurs fonctionnalités des adresses e-mail très rarement utilisées (comme les commentaires!), Mais qui peuvent être reconnues par des expressions régulières.

Voici la section sur la validation des e-mails dans la spécification HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e -mail-state-% 28type = email% 29

Et voici l'expression régulière:

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[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])?)*$
27
Justin Fagnani

Pour cette regex simple fonctionne assez bien.

var email = "[email protected]"
bool emailValid = RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email);
61
Airon Tark

J'utilise ce modèle: validate-email-address-in-javascript . (Supprimer la barre oblique / délimiteurs et ajoutez les délimiteurs Dart: r'').

bool isEmail(String em) {

  String p = r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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);
}

ÉDITER :

Pour plus d'informations sur la validation des e-mails, consultez ces articles: dominicsayers.com et regular-expressions.info . Cet outil peut également être très utile: gskinner RegExr .

EDIT: Justin en a un meilleur. J'utilise le modèle qu'il a proposé.

16
Eric Lavoie

Le meilleur modèle regEx que j'ai trouvé est la validation d'e-mail 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])?

Tiré de: regexr.com/2rhq7

Tous les autres regEx que j'ai testés, marquez la chaîne email@email comme positif, ce qui est faux.

9
David_E

Validation des e-mails dans Dart, suivez le Regex:

bool validateEmail(String value) {
  Pattern pattern =
      r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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]"));
}

Faites couler le Regex ci-dessous:

r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[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,}))$'

Référence: https://Gist.github.com/aslamanver/3a3389b8ef88831128f0fa21393d70f

3
Googlian

2019 Réponse correcte

Pour prendre correctement en charge la validation des e-mails dans Dart/Flutter, consultez le package pub.dev email_validator.

Source: https://github.com/fredeil/email-validator.Dart

_

Cela prend correctement en charge:

  • TLD [facultatif]
  • Domaines internationaux [facultatif]
  • Domaines filtrés (par exemple, [email protected])
  • Adresses sans adresse (par exemple, utilisateur @ localhost)
3
Lance

J'ai utilisé un validateur simple et pas si rigoureux qui permet aussi [email protected] et [email protected] domaines:

var email = "[email protected]";
  bool emailValid = RegExp(r'^.+@[a-zA-Z]+\.{1}[a-zA-Z]+(\.{0,1}[a-zA-Z]+)$').hasMatch(email);
  print (emailValid);
1
Priyansh Brannen

Je suis arrivé sur cette page à la recherche d'une validation par e-mail, mais aucun des exemples trouvés ici n'a réussi tous mes tests.

J'ai donc décidé d'écrire mon propre regEx, en adaptant certains des concepts d'autres réponses (debout sur les épaules de géants), et il se porte bien jusqu'à présent:

^[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,}$

Si vous rencontrez des problèmes avec ce modèle, veuillez me le faire savoir.

1
bitfreeze

J'ai vu cette page à quelques reprises lors de ma recherche, et j'ai trouvé une Regex pour Dart plus simple qui pourrait aider ceux qui reviendront sur cette page plus tard.

voici le regex:

^[^@]+@[^@]+\.[^@]+

donc dans Dart vous pouvez l'utiliser comme

RegExp(r'^[^@]+@[^@]+\.[^@]+')

Il ne prend en charge que les e-mails normaux et non sans TLD. par exemple, [email protected] mais pas moi @ localhost. J'espère que ça aide.

1
Majid

La meilleure expression régulière que j'ai rencontrée jusqu'à présent est la suivante:

r '([a-z0-9] [- a-z0-9 _ +.] [a-z0-9]) @ ([a-z0-9] [- a-z0-9.] [a-z0-9]. (com | net) | ([0-9] {1,3}. {3} [0-9] {1,3})) "

cette approche repose sur l'ajout de chaque nom de domaine avec lequel vous souhaitez que votre utilisateur puisse se connecter.

je viens d'ajouter com et net car ce sont les plus populaires mais vous pouvez simplement ajouter plus

0
Ammar