VALIDATEUR ADRESSE EMAIL (RFC 2822)

PhiLho Messages postés 4 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 12 novembre 2008 - 30 sept. 2008 à 22:32
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 31 juil. 2009 à 10:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47966-validateur-adresse-email-rfc-2822

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
31 juil. 2009 à 10:36
on pourrait simplifier:

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+((\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)?)+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$
en
^(?!\.)[.\w!#$%&'*+/=?^_`{|}~-]+@(?!-)[\w-]+\.\w+$

seule difference ici, j'ai choisi d'invalider le tiret - dnas l'extension du serveur.

quant a la version avec majuscules... c'est un peu inutile, il suffit de dire au moteur de regexp d'être sensible ou non a la casse
pifol Messages postés 23 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 26 avril 2009
25 avril 2009 à 16:50
vrai, on a droit aux majuscules.
Maintenant, pourquoi les filtres de validation d'emails ou d'urls polluent toujours les topics sur les regex ??? quand on voit ce truc (de soit-disant 6600 chars (= +6Mo :/)) remplit de parenthèses non capturante et d'aucune référence arrière ni de condition, bref du brainfuck pour les nains, on se demande pourquoi les gens passent leur temps à réinventer la roue (sûrement déjà fait depuis les années 50 (= regexs))...
Tiens: zut ta regex ne gère pas tout l'unicode ! seulement l'ascii... c'est bête: elle ne sera pas utile aux deux autres tiers de la planète. Les urls, c'est pareil: on a maintenant droit aux accents, mandarin... !!!
PhiLho Messages postés 4 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 12 novembre 2008
12 nov. 2008 à 08:16
Merci d'avoir tenu en compte mes remarques... :-)
Les adresses e-mails ne sont PAS toujours en minuscules. La RFC spécifie en fait qu'en théorie TRUC est différent de truc mais qu'en fait, (quasiment?) tous les serveurs d'e-mail passent les adresses en minuscules, d'où l'équivalence effective.
Et de ce fait, un bon valideur (je devrais dire filtre) doit, justement, soit passer l'adresse donnée en minuscules avant test, soit tenir compte des majuscules dans la RE: je ne suis pas tête en l'air, mais j'aime bien taper PhiLho@QuelquePart.com (adresse fictive, bien sûr). Et je suis agacé quand un soit-disant valideur JavaScript la rejette ! :-)

Et ma remarque sur les tests portait sur le petit bout de code JavaScript que tu donnes en exemple :
var rgxp = /^[a-z0-9!#$%&'*+/=?^[etc.]
Le / au milieu termine l'expression. Il faut soit utiliser \/ soit new RegEx()

Oh, et je n'ai pas mentionné la RFC 822, c'est juste l'URL d'une expression régulière fort connue. J'avoue que je n'ai pas étudié la différence entre 822 et 2822, mais je doute que le format des e-mails ait beaucoup changé entre les deux... :-)

Cordialement.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
11 nov. 2008 à 19:46
@Philho :

deja je parle de la RFC2822 de 2001 et non de la RFC822 de 1982!

de plus une adresse email est toujours minuscule, jamais majuscule. TRUC@hotmail.fr = truc@hotmail.fr
les adresses emails ne sont pas case-sensitive, je pense qu'on l'a suffisamment dit. si c'est cela que tu entendais voici un correction qui te fera soupirer un peu plus :

^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+((\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)?)+@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-]*[a-zA-Z0-9])?$

ici ma regexp n'est surement pas parfaite, mais fonctionne pour la plupart des cas même avec des adresses exotiques a bases de smilleys (^_^).

Pour ce qui est des tests, tu devrait pourtant savoir que je ne poste jamais sans tester avant. aprés on est pas a l'abris que si ça fonctionne bien chez nous, ça ne fonctionne pas forcement aussi bien chez d'autres.
PhiLho Messages postés 4 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 12 novembre 2008
30 sept. 2008 à 22:32
Ça me fait bien rigoler. Enfin, pas trop, je soupire, plutôt, quand je vois ENCORE une expression régulière pour des adresses e-mails qui rejette les majuscules. Rien que ça, ça discrédite complètement l'expression.
Accessoirement, le JavaScript n'a pas l'air très testé, il faudrait au moins échapper les slashes...
C'est bien de donner un lien vers la RFC, c'est mieux de s'y conformer...
Pour information, il y a une seule expression régulière qui se conforme vraiment à la RFC, elle fait 6600 caractères de long : http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
En fait, le seul bon moyen de tester une adresse est de la décomposer (local part/domain, puis les divers cas de chacun). On peut utiliser des expressions régulières pour chaque sous-cas élémentaire, mais essayer de construire une expression général est formidablement inefficace.

Désolé pour ces remarques négatives, mais je n'ai pas envie de tomber encore sur un site utilisant ce genre d'expression ! :-)
Rejoignez-nous