Contrôler un email
Par CrazyCat le 28/07/2009, 22:57 - Expressions régulières - Lien permanent
Je ne vais pas me bloquer sur la version RFC d'une adresse e-mail, ni sur la vérification de son existence, mais sur une vérification syntaxique basique.
Syntaxe d'une adresse e-mail
Une adresse e-mail comporte 2 parties: utilisateur et domaine.
L'utilisateur peut compporter tout les caractères alphanumériques, ainsi que le "-", le " _" et le "+" (bien que rare). Le domaine est composé de plusieurs caractères alphanumériques, ainsi que du "-", le tout suivi d'un point et de 2 à 4 caractères.
Expression régulière
Nous pouvons donc valider la plupart des emails avec le masque suivant:
^([_a-z0-9-+.]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$
Cette expression marche dans 95% dans cas. Elle doit bien entendu être traitée de manière case-insensitive (sans tenir compte de la casse).
Commentaires
Je me suis mis aux regex il y a peu de temps, c'était mon talon d'achille mais c'est tellement pratique et surtout utilisé dans beaucoup de languages mais il est vrai que c'est plutôt agréable de pouvoir trouver des pattern tout prêt et donc s'éviter des maux de tête :p
Bon article, mais je crois que beaucoup d'autres caractères sont autorisés par la norme, mais souvent refusés par exclusion du script, comme {, }, &, , par exemple. Dans le même genre, beaucoup d'extension de noms de domaine, dont le com, acceptent les unicodes mais c'est rarement utilisé :)
Tout à fait d'accord avec toi, cette expression régulière est bien faite pour fonctionner dans la plupart des cas mais elle ne respecte pas la RFC. Il existe une "vraie" expression régulière bien conforme, mais elle fait tellement mal à la tête que je préfère l'oublier.
Une petite astuce possible (que j'ai déjà utilisée) est de commencer par faire un remplacement des caractères tels que {, }, &, .... par le signe "+", et on peut donc utiliser l'expression pour vérifier la syntaxe sans compliquer la règle.
Elle est pas suffisante ta regex, non ? Elle apparait pas tres logique : @o.zu ->passe
(_a-z0-9-+.+)* -> signifie sous ensemble repété 0x ou +
etc
bye