VALIDER UNE ADRESSE EMAIL AVEC REGEXP (EXPRESSIONS RÉGULIÈRES)
manouxus
Messages postés2Date d'inscriptionmardi 2 août 2005StatutMembreDernière intervention22 mars 2007
-
22 mars 2007 à 14:57
arouguini
Messages postés1Date d'inscriptionmercredi 9 février 2011StatutMembreDernière intervention26 mars 2011
-
26 mars 2011 à 18:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Bien sur, je ne l'utilise qu'avec activation par envoi d'un courriel qui confirme réellement que l'adresse est non seulement bonne syntaxiquement parlant (???) mais qu'elle correspond - en plus - à une véritable adresse !
happyleptic
Messages postés5Date d'inscriptionmercredi 21 juin 2006StatutMembreDernière intervention25 février 2011 25 févr. 2011 à 12:18
Bahanix
Messages postés32Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention27 avril 2007 13 sept. 2008 à 12:05
// Retourne true si la chaine de caractère représente une adresse e-mail
// Inclus les symboles souvent oubliés tels que le "+" dans la partie gauche du "@".
// Le mode "i" en fin rend insensible à la casse. Pensez au strtolower.
function isMail($str){
return preg_match('/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i',$str);
}
adaneels2
Messages postés2Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention21 septembre 2007 21 sept. 2007 à 12:24
JACGHIT : question posée au mauvais endroit et pas assez de détails.
ton truc n'est pas un script (recherche google "balise html script" et tu comprendras), mais peut être du php, asp, asp.net ...
adaneels2
Messages postés2Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention21 septembre 2007 21 sept. 2007 à 12:20
Granhon : très bonne tes expressions régulières, merci !
Par contre, la dernière ne comprend pas les noms de domaine .eu (europe) et les pays .fr, .de, ...
Donc je conseille vivement d'utiliser la seconde.
jacghit
Messages postés5Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 5 août 2007 5 août 2007 à 18:17
Bonjour, désolé de ma question d'ignare, mais je ne sais pas ce qui signifie <%.
Où doit-on placé ce code : c'est un script ? un fichier php ?
granghon
Messages postés3Date d'inscriptionsamedi 6 décembre 2003StatutMembreDernière intervention 4 mai 2004 26 juin 2007 à 18:30
Le dernier bloc n'était pas correct, c'est la classe :alpha: qu'il faut utiliser et non :alnum:.
voila
hyryel
Messages postés11Date d'inscriptiondimanche 30 mai 2004StatutMembreDernière intervention 5 août 2005 30 avril 2007 à 10:43
Edit de mon post :
me suis trompé, les classes ne sont pas :alphanum: mais :alnum:
ce qui donnerait plutot :
"^[:alnum:]+(([.-_]?[:alnum:]+)+)?)\@(([:alnum:]+[.-_])+[:alnum:]{2,4}$"
c'est mieux.
hyryel
Messages postés11Date d'inscriptiondimanche 30 mai 2004StatutMembreDernière intervention 5 août 2005 30 avril 2007 à 10:40
ton expression régulière manouxus contient des caractère inutiles qui la rende plus lourde à gérer.
En effet, les caractères dit "spéciaux" n'ont pas besoins d'être "échapé" lorsqu'ils sont entre crochet.
ton expression devient dont :
"^[a-zA-Z0-9]+(([.-_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[.-_])+[a-zA-Z]{2,4})$"
et tu pourrais même utiliser les classes de caractère pour pas te prendre la tête :
"^[:alphanum:]+(([.-_]?[:alphanum:]+)+)?)\@(([:alphanum:]+[.-_])+[:alphanum:]{2,4}$"
voili voilou...
manouxus
Messages postés2Date d'inscriptionmardi 2 août 2005StatutMembreDernière intervention22 mars 2007 22 mars 2007 à 14:57
Cette chaîne ne marche pas avec les adresses mail correctes du type totopipo@chu-marseille.fr
Je l'ai modifiée en:
26 mars 2011 à 18:29
devrait suffire ... pour respecter les normes
http://www.faqs.org/rfcs/rfc2822.html
et http://www.faqs.org/rfcs/rfc1035.html
... formule que je tire de http://atranchant.developpez.com/code/validation/
Bien sur, je ne l'utilise qu'avec activation par envoi d'un courriel qui confirme réellement que l'adresse est non seulement bonne syntaxiquement parlant (???) mais qu'elle correspond - en plus - à une véritable adresse !
25 févr. 2011 à 12:18
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"
(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]]))|"(?
:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".\[\
]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\".
\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\".\[\]]))|"(?:[^"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
13 sept. 2008 à 12:05
// Inclus les symboles souvent oubliés tels que le "+" dans la partie gauche du "@".
// Le mode "i" en fin rend insensible à la casse. Pensez au strtolower.
function isMail($str){
return preg_match('/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i',$str);
}
21 sept. 2007 à 12:24
ton truc n'est pas un script (recherche google "balise html script" et tu comprendras), mais peut être du php, asp, asp.net ...
21 sept. 2007 à 12:20
Par contre, la dernière ne comprend pas les noms de domaine .eu (europe) et les pays .fr, .de, ...
Donc je conseille vivement d'utiliser la seconde.
5 août 2007 à 18:17
Où doit-on placé ce code : c'est un script ? un fichier php ?
26 juin 2007 à 18:30
en particulier la section : "The Official Standard: RFC 2822" où tu as une expression régulière qui match toutes les adresses email :
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
La même en simplifiée (qui ne prends plus les "" et donc les adresses sociétaires par exemples :
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
Et avec la limitation des noms de domaines (par exemple, la tienne n'inclut pas les .museum...) :
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|biz|info|name|aero|biz|info|jobs|museum)\b
Faut juste la tenir à jour mais ça n'évolue pas souvent...
30 avril 2007 à 11:35
"^[:alnum:]+(([.-_]?[:alnum:]+)+)?)\@(([:alnum:]+[.-_])+[:alpha:]{2,4}$"
Le dernier bloc n'était pas correct, c'est la classe :alpha: qu'il faut utiliser et non :alnum:.
voila
30 avril 2007 à 10:43
me suis trompé, les classes ne sont pas :alphanum: mais :alnum:
ce qui donnerait plutot :
"^[:alnum:]+(([.-_]?[:alnum:]+)+)?)\@(([:alnum:]+[.-_])+[:alnum:]{2,4}$"
c'est mieux.
30 avril 2007 à 10:40
En effet, les caractères dit "spéciaux" n'ont pas besoins d'être "échapé" lorsqu'ils sont entre crochet.
ton expression devient dont :
"^[a-zA-Z0-9]+(([.-_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[.-_])+[a-zA-Z]{2,4})$"
et tu pourrais même utiliser les classes de caractère pour pas te prendre la tête :
"^[:alphanum:]+(([.-_]?[:alphanum:]+)+)?)\@(([:alphanum:]+[.-_])+[:alphanum:]{2,4}$"
voili voilou...
22 mars 2007 à 14:57
Je l'ai modifiée en:
"^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9\-]+[\.\-\_])+[a-zA-Z]{2,4})$"