Validateur adresse email (rfc 2822)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 619 fois - Téléchargée 16 fois


Contenu du snippet

Validation d'adresse email conformément au spécification de la RFC 2822 :

http://tools.ietf.org/html/rfc2822#section-3.4.1

voir aussi le validateur email de fabienfs (plus simple mais tout a fait fonctionnel) :
http://regex.codes-sources.com/codes/ADRESSE-MAIL_47935.aspx

Source / Exemple :


// validateur EMail RFC2822

^[a-z0-9!#$%&'*+/=?^_`>

// validateur acceptant les adresses des "têtes en l'air" qui ne désactive pas le CAPS.LOCK du clavier, ou qui appuis sur SHIFT en permanence... :
^[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])?$ // exemple javascript : function validEmailRFC2822(aEmail) { var rgxp = /^[a-z0-9!#$%&'*+/=?^_`{~-]+((\.[a-z0-9!#$%&'*+/=?^_`{~-]+)?)+@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$/ return rgxp.test(aEmail); }

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
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

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

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
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
27
@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

Ç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 ! :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.