VÉRIFICATION D'E-MAILS PAR EXPRESSIONS RÉGULIÈRES

cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 - 24 juin 2002 à 22:46
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006 - 20 janv. 2006 à 00:03
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/15873-verification-d-e-mails-par-expressions-regulieres

cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
20 janv. 2006 à 00:03
Melnofil
Petit commentaire pour ton Historique des mises à jour
du 17/01/2006 12:52:15
Tu dis "(attention comme pour la RFC il n'y a pas de taille maximale pour les "mots"
et donc pour l'extension de l'email)"
C'est pas très correct. La RFC sur les email se reporte à celle
sur les noms de domaine pour préciser.
1 identifiant (.) est limité à
63 caractères Max, La somme des identifiants à 255 caratères (octets).
Les TLDs, de fait, à 2 Min et 6 Max ([a-z]{2,6}).
Ainsi .. ... .tld fait max 255 caractères.
Et l'on doit semble t'il compter les points.
Je cite : "le nombre total d'octets composant un nom de domaine entièrement qualifié
(c'est à dire la somme de tous les identifiants plus la mention
des longueurs d'identifiants) est limité à 255."
javascriptfr.com c'est 16 caractères notés dans les DNS.
Dans mon expression @((?![-\d])[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}
si je ne m'abuse avec 4 identifiants de 63 + les points = 256
et un .fr minimum fait 259 et c'est une erreur !
http://abcdrfc.free.fr/rfc-vf/rfc1034.html paragraphe 3
C'est la limitation des serveurs DNS (bind, etc).
Se rappeler
- 63 octets par identifiant
- 255 octets par nom de domaine entièrement qualifié (FQDN)
Je me trompe ? C'est en tout cas la limitation de mon serveur DNS local !
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
19 janv. 2006 à 21:18
OK, allez voir
http://www.javascriptfr.com/code.aspx?ID=35656
J'hésitais car le sujet est largement débattu.
Mais le problème n'est pas si simple !
Pour les autres languages, simple, il faut
reprendre les expressions régulières.
Mais je parlais aussi d'isoler les fonctions pour
pouvoir les utiliser dans des pages en français, anglais
bania moulengué et kikoutou entre autre... en
ne modifiant que la fonction d'entrée.
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
19 janv. 2006 à 13:34
sivispacem au lieu de troller sur ma source LoL
(Surtout que le site s'y met aussi dans ma messagerie en envoyant un email par message !!)
Actuellement il est très difficile de faire la synthèse de tes posts sans se mélanger les pinceaux,
alors pourquoi tu nous ferais pas un tutorial complet
rassemblant toutes tes connaissances sur la validation des emails !
Et tu nous organise tout ca en chapitres histoire qu'on s'y retrouve ;^)
puis tu fais un lien vers ton tuto d'ici !

En plus la validation d'email n'est pas liée au javascript en particulier,
tu pourrais écrire un tutorial plus général
pour tous les languages utilisant les mêmes expressions régulières.

Ceci étant dit je t'oblige en rien si tu veux continuer a poster ici, fait donc =)
++ Melnofil
cs_Mimata Messages postés 7 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 24 octobre 2006
19 janv. 2006 à 13:00
Oh oh ! Doucement tornado !!! Je suis largué moi ;-D
J'ai 3 semaines de javascript et 3 jours d'expressions régulières
alors les bibliothèques, cuisines et autre mobilier... je sais même pas ce que c'est.
J'ai aussi regardé la norme RFC 1034 mais j'ai pas pané grand chose non plus. Bref, y'a du boulot.

Bon, pour être plus concret, mon formulaire est visible là :
http://xhtml.css.free.fr/contact.htm et le javascript associé là : http://xhtml.css.free.fr/_JS/formulaire.js.
Le but du jeu étant de rester valide en XHTML1.0 Strict.

Je comprends pas bien pourquoi on a besoin de x fonctions pour tester le mail
et je ne sais pas utiliser les paramètre (c'est pour ça tu vas me dire).
On peut pas tout mettre dans ma fonction verifier() ? J'ai pas envie d'appeler 50 fonctions juste pour tester 1 champs...
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
19 janv. 2006 à 01:45
Mimata
Code en universel :
function bSyntaxeEmail(sMail) {... renvoie un booléen}
function bDomainTLD(sMail) {... renvoie un booléen}
etc... (true ou false)
Tes fonctions seront réutilisables en bibliothèques,
sans tripotages pour passer d'une langue à une autre
ni pour modifier l'apparence, etc
Et une fontion d'entrée personnalisable pour ta cuisine
(genre function TestCompletDuCourriel(sMail))
(langues, actions, présentation et bidouillages à faire
varier suivant les formulaires).
Tu sera gagnant avec le temps.

Et appel ton javascript avec this.form.NOMDELAVARIABLE.value
Du genre
<form>


</form>
au lieu de chercher la valeur avec
var email = document.forms['formulaire'].mail.value;
(une variable de plus, et le nom du formulaire source d'erreur !)
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
19 janv. 2006 à 01:16
Oups pour les "digits" à la fin et 1 seul caractère !

notez : @([a-z][a-z\d-]{0,62}(?!-)\.){1,4}[a-z]{2,6}$/gi

@x.xx à @x[63].xxxxxx et @-.xx et @xxxx-.xx interdits.
La répétition et de 1 minimum pour les identifiants
à 4 (arbitraire) car au total le max est 255 avant le TLD.
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
19 janv. 2006 à 01:03
Excusez j'ai oublié la RFC 1034 en français :
http://abcdrfc.free.fr/rfc-vf/rfc1034.html
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
19 janv. 2006 à 01:01
Une modif pour les noms de domaines et être conforme
à la RFC 1034 (voir)
Résumé : Notez que, bien que tant les majuscules que les minuscules soient
autorisées dans des noms de domaines, aucune importance n'est accordée
à la casse. C'est-à-dire, deux noms lexicographiquement identiques, mais
écrit dans une casse différente seront considérés comme identiques.
Les identifiants doivent suivre les règles définies pour les noms
d'hôtes ARPANET. Ils doivent commencer par une lettre, terminer par
une lettre ou un digit, et n'avoir à l'intérieur que des lettres,
des digits, et éventuellement le caractère Hyphénation (-).
On notera de plus quelques restrictions à propos de la longueur.
Un identifiant doit avoir au plus 63 caractères.

Donc je code le domaine comme suit :
@([a-z][a-z\d-]{0,61}[a-z]\.){1,4}[a-z]{2,6}$/gi
Et on est conforme !

Il restera les @[octet.octet.octet.octet]
et les @#nombre (nombre = adresse IP décimale (32 bits))
de 167772161 (10.0.0.1) à 3741319422 (223.0.0.254)
de la Classe A à la Classe C, avec quelque addresses à
éliminer (genre 11.812.785.999)...
Mais ce type d'adresse me semble inusité, sans compter les
ennuis pour s'en souvenir !
Quelqu'un à vérifié une adresse de ce type qui fonctionne ?
cs_Mimata Messages postés 7 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 24 octobre 2006
19 janv. 2006 à 00:04
Sivispacem, je te remercie pour ce petit cours particulier et pour les explications très claire, complètes
que tu m'a données. J'ai appris plein de choses au cours de ce post et j'en suis ravis !

Toutefois, j'ai remis if (verif.exec(email) == null) à la place de if(bal.match(verif)!=bal) sinon ça ne marchait plus
avec les geckos (FF & Co) et j'ai enlevé \t ce qui réactive bien suppr mais pas les tab ni les flèches (sous FF).

- Tout semble fonctionner sous IE et Opéra, tab, flèche, suppr et test
- Sous Firefox, Netscape et Mozilla : pas de tabulation ni de flèches. Le formulaire reste fonctionnel si on a une souris
mais pour une navigation au clavier, je coince mon visiteur dans le champs mail...pas très accessible...

Voilà, encore merci.
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
18 janv. 2006 à 21:30
Normal, tu intercepte le tampon clavier sur
un champ vide (pas de déplacement), la tabulation
tu l'interdit (\t) elle est donc supprimée, et
suppr sur rien ne veux rien dire ou doit marcher
à gauche d'un caractère existant(mais cela dépend).

Internet Explorer ne connaît le code de la touche que
dans la propriété keyCode et ne traite pas les touches
spéciales (entrée, tabulation, del, suppr, ...)
Netscape connaît le code par la propriété which dans toutes
ses versions et ne traite pas les touches spéciales (entrée,
tabulation, del, suppr, ...)
Mais, mieux que mon baratin, vas voir
http://actuel.fr.selfhtml.org/articles/javascript/entrees_formulaire/
pour les bizarreries des navigateurs et les bons scripts.
Site sérieux !
Mais le sujet est déplacé ici !
Il doit y avoir d'autre posts !
cs_Mimata Messages postés 7 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 24 octobre 2006
18 janv. 2006 à 18:04
Sivispacem

Le mail.value.length!=0 (correction faite du ==) me sert car le mail n'est pas obligatoire,
je ne veux tester la validité du mail que si le champs mail est renseigné.

Mon code final :

var email = document.forms['formulaire'].mail.value;
var verif = /^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?!-)[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;
if (mail.value.length!=0) {
if(bal.match(verif)!=bal) {
alert("Votre mail est incorrect. Veuillez vérifier si vous voulez que je puisse vous réponde.");
mail.focus();
mail.style.backgroundColor=champspasok;
return false;
}
}
else {mail.style.backgroundColor=champsok;}

Pour ma deuxième fonction j'ai un petit soucis aussi : les flèches de déplacement du curseur,
la tabulation et suppr. sont désactivés aussi, sais-tu pourquoi ?
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
18 janv. 2006 à 16:55
Mimata,
mail.value.length!==0 ça ne sert à rien,
et c'est bizarre (!==) ???

Fais simplement
if(bal.match(verif)!=bal)
{
alert("Votre mail est incorrect. Veuillez vérifier.");
mail.focus();
mail.style.backgroundColor=champspasok;
return false;
}

Cela n'accepte pas les mails vides

La casse est ignorée dans les mails
voila pourquoi le "$/gi" à la fin de l'expression régulière,
"i" signifie d'ignorer la casse. C'est un masque sur le sixième
bit de l'octet (min, MAJ en le basculant)
A 01000001 Z 01011010
a 01100001 z 01111010
(00?00000) (00?00000)
donc [a-zA-Z] sans le "$/i"
ou [a-z] avec "$/i" plus court.
cs_Mimata Messages postés 7 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 24 octobre 2006
18 janv. 2006 à 15:22
Bonjour,

Merci pour tes explications Sivispacem, j'ai repris ce que tu m'avais indiqué
et ça marche bien maintenant, plus de plantage donc c'est OK.
Par contre, j'ai pas utilisé pa boucle pour vérifier l'extention...ça me parait un peu trop lourd
pour l'utilisation que j'ai à en faire mais c'est tout de même intéressant de l'avoir créée.

J'ai donc une fonction qui vérifie le mail de mon champs "mail" de mon formulaire "formulaire"
lors de la soumission de ce dernier :

function verif_mail() {
var champsok=""; // Couleur des champs correctement remplis
var champspasok="#FF6500"; // Couleur des champs mal remplis
var email = document.forms['formulaire'].mail.value;
var verif = /^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?!-)[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;
if (mail.value.length!==0) {
if (verif.exec(email) == null) {
alert("Votre mail est incorrect. Veuillez vérifier.");
mail.focus();
mail.style.backgroundColor=champspasok;
return false;
}
}
else {mail.style.backgroundColor=champsok;}
}

A cette fonction, j'ai couplé une autre fonction qui désactive les caractères accentués
et autres caractères invalides dans une mail lors de l'écriture du mail :

function valid_mail(evt) {
var keyCode = evt.which ? evt.which : evt.keyCode;
var interdit = 'àâäãçéèêëìîïòôöõùûüñ &*?!:;,\t#~"^¨%$£?²¤§%*()[]{}<>|\\/`\'';
if (interdit.indexOf(String.fromCharCode(keyCode)) >= 0) {
return false;
}
}

Sinon, j'ai une question : un mail peut contenir des majuscules ?
Enfin plus précisément, est-ce que les mails sont sensibles à la casse ?
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
18 janv. 2006 à 13:33
Voila effectivement ce que j'utilise :
//-----------------------------------------------------------------
function bDomainTLD(sMail)
{
var reExt=/^(ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|
az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|
ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|de|
dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|fx|
ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|
hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|
kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|
ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|
my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|pa|pe|pf|pg|
ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|
sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|
tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|
ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zr|zw|com|edu|gov|int|mil|
net|org|biz|pro|info|aero|name|coop|arpa|nato|museum)$/gi;
return sMail.substr(sMail.lastIndexOf(".") + 1).match(reExt)!=null;
}
//-----------------------------------------------------------------
Attention, j'ai mis des retour chariot dans "var reExt" pour
la lisibilité, mais c'est une seule ligne jusqu'à "|museum)$/gi;"
Et puis j'ai ajouté les ".eu" pas encore actifs à cette date.
Donc une seule variable et renvoie d'un booléen d'où le nom
de la fonction (b) Domain (Top Level Domain).
On lui passe l'adresse de courriel en entier (xxxxx@xxxxx.tld).
Des critiques ?
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
18 janv. 2006 à 11:41
Je vous préviens que la source à été modifiée depuis hier.

sivispacem,
partant du principe que le code javascript est long a s'executer
(je parle de ta boucle sur le tableau des extensions)
je me demande s'il serait pas plus rapide de tester directement une RegExp du style :
"([a-z]{2}|com|edu|gov|int|mil|net|org|biz|pro|info|aero|name|coop|arpa|nato|museum)"
.. Je te passe les 3km d'extensions sur 2 lettres ;^)
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
17 janv. 2006 à 13:20
Mimata
Petite correction
var re=/^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?!-)[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;

1,62 remplacé par 0,62 pour un nom de domaine
min x.TLD à x(63).TLD

Les TLD (Top Level Domain) sont de 2 à 5 pour museum
les 2 caractères sont les pays. Bientôt, il ne faudra pas
oublier de rajouter le .eu dans la liste(Array('ac'....... 'eu')
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
17 janv. 2006 à 13:00
Mimata, essaie
function EmailOK(sMail)
{
var re=/^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?!-)[a-z\d-]{1,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;
return (sMail.match(re)==sMail);
}

function DomainExtOK(sMail)
{
var tExt = new Array('ac','ad','ae','af','ag','ai','al','am','an','ao','aq','ar','as','at','au','aw','az','ba','bb','bd','be','bf','bg','bh','bi','bj','bm','bn','bo','br','bs','bt','bv','bw','by','bz','ca','cc','cd','cf','cg','ch','ci','ck','cl','cm','cn','co','cr','cs','cu','cv','cx','cy','cz','de','dj','dk','dm','do','dz','ec','ee','eg','eh','er','es','et','fi','fj','fk','fm','fo','fr','fx','ga','gb','gd','ge','gf','gg','gh','gi','gl','gm','gn','gp','gq','gr','gs','gt','gu','gw','gy','hk','hm','hn','hr','ht','hu','id','ie','il','im','in','io','iq','ir','is','it','je','jm','jo','jp','ke','kg','kh','ki','km','kn','kp','kr','kw','ky','kz','la','lb','lc','li','lk','lr','ls','lt','lu','lv','ly','ma','mc','md','mg','mh','mk','ml','mm','mn','mo','mp','mq','mr','ms','mt','mu','mv','mw','mx','my','mz','na','nc','ne','nf','ng','ni','nl','no','np','nr','nt','nu','nz','om','pa','pe','pf','pg','ph','pk','pl','pm','pn','pr','ps','pt','pw','py','qa','re','ro','ru','rw','sa','sb','sc','sd','se','sg','sh','si','sj','sk','sl','sm','sn','so','sr','st','su','sv','sy','sz','tc','td','tf','tg','th','tj','tk','tm','tn','to','tp','tr','tt','tv','tw','tz','ua','ug','uk','um','us','uy','uz','va','vc','ve','vg','vi','vn','vu','wf','ws','ye','yt','yu','za','zm','zr','zw','com','edu','gov','int','mil','net','org','biz','pro','info','aero','name','coop','arpa','nato','museum');
var Ext = sMail.substr(sMail.lastIndexOf(".") + 1).toLowerCase();
for (var i=0; i<tExt.length; i++) {if (Ext==tExt[i]) {return true; }}
return false;
}

function ValidEmail(sMail)
{
var sTrue = 'Email Correct !';
var sMailFalse = 'Erreur\nEmail incorrect !';
var sExtFalse = 'Erreur\nExtension incorrecte !';
switch (EmailOK(sMail))
{
case true:
return DomainExtOK(sMail) ? alert(sTrue) : alert(sExtFalse); break;
case false:
alert(sMailFalse); return false; break;
}
}

ValidEmail(sMail) est la fonction d'entrée à modifier au choix...
A-Z n'est pas utile si tu met $/i pour "ignorer la casse"
et 0-9, c'est \d
le point d'interrogation n'est pas utile dans (\.?|-?|_?)
car si pas de point, de - ou de _, c'est une adresse [a-z\d]@
puisque [a-z\d](....)* le étoile prend la valeur "0".

Ces fonctions marchent avec firefox, Mozilla, IE sur
plateforme Windows, et Firefox, Mozilla, Epiphanie sur
Linux.
cs_Mimata Messages postés 7 Date d'inscription vendredi 31 octobre 2003 Statut Membre Dernière intervention 24 octobre 2006
17 janv. 2006 à 04:47
Bonjour,

J'utilise cette expression citée plus haut :
/^[a-zA-Z0-9]+((\.?|-?|_?)[a-zA-Z0-9]+)*@[a-z0-9]+([-_]?[a-z0-9]+)?(.[a-z0-9]{2,}){1,2}$/

Ca semble marcher mais si on met un . juste devant l'@, ça me fait planter le navigateur (IE et FF même tarif)...
Une idée quelqu'un ? Perso, je comprends pas grand chose à ces lignes.
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
7 avril 2005 à 06:52
merci, c'est ce que je cherchais, j'arrive pas à comprendre tout ce qui se racontait dans la rfc originale quand j'avais été voir et la traduction avec google marchait pas. Je crois que jvai reprendre tes fonctions dans mon controle de formulaire car la mienne tient pas compte de toutes ces règles et je n'ai pas envi de réinventer la roue :-D En tout cas, merci pour les explications, tu devrais faire formateur.
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
6 avril 2005 à 23:31
Une adresse de courriel (bal, email...) c'est compliqué.
De la forme :
@<domaine>
<chaîne-pointée> | <chaîne-quotée>
<chaîne-pointée> = <chaîne> | <chaîne>.<chaîne-pointée>
<chaîne-quotée> = "<texte>"
<texte> = \<x> | \<x><texte> | | <texte>
<x> tout caractère de l'ASCII (pas d'exceptions)
tout caractère parmi les 128 caractères ASCII
sauf <CR>, <LF>, quote ("), ou antislash (\)
<chaîne> = <char> | <char><chaîne>
<char> = 128 caractères ASCII sauf <special> or <SP>
<SP> = Le caractère Espace (ASCII code 32)
<special> = < > ( ) [ ] \ . , ; : @ " et les caractères de
contrôle de l'ASCII (codes 0 à 31 inclus et 127)
<CRLF> = <CR><LF>
<CR> = Le caractère Retour Chariot (ASCII code 13)
<LF> = Le caractère Nouvelle Ligne (ASCII code 10)
<SP> = Le caractère Espace (ASCII code 32)

C'est le RFC 822 (Request For Comment)
voir http://jlr31130.free.fr/rfc822.html
pour la traduction en français
ou http://www.w3.org/Protocols/rfc822/ si tu préfère en
américain.
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
6 avril 2005 à 23:17
@[192.252.19.3] c'est plutot rare ca, ta chopé çà où comme adresse??? j'ai jamais vu çà, ya une norme qui l'autorise? tu sais laquelle que j'aille jeter un d'oeil stp? tes fonctions ont l'air pal mal en effet, je les regarderai plus en détail demain, la jsuis naze, tro de taf aujourd'hui. merci, tchao
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
6 avril 2005 à 23:17
lordskyser1 si tu fait :

if(email.search(/^[a-zA-Z0-9]+((\.?|-?|_?)[a-zA-Z0-9]+)*@[a-z0-9]+([-_]?[a-z0-9]+)?(.[a-z0-9]{2,}){1,2}$/)==-1) return false;
tu ne stocke pas de variable et tu sort immédiatement de ta fonction, c'est donc plus rapide et moins gourmand en mémoire.
on termine simplement la fonction après tous les tests par un
return true;
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
6 avril 2005 à 23:05
OK lordskyser1 j'ai testé.
il reste que @[192.252.19.3] c'est permis !
voila les 3 fonctions que j'utilise pour le nom de
domaine (un peu plus court car je crée peu de variables)

//-----------------------------------------------------------------
function DomainIPOK(Dom)
{
/* = <short>.<short>.<short>.<short>
<short> = un, deux, ou trois chiffres représentant un
entier décimal de 0 à 255
*/
if (Dom.match(/\[(\d{1,3}\.){3}\d{1,3}\]$/g)!=Dom) return false;
var tIP=Dom.substring(1,Dom.length-1).split(".");
if (tIP.length!=4) return false;
for (var i=0;i<4;i++) {if (tIP[i]>255) return false;}
if ((tIP[0]==255)||(tIP[0]==0)||(tIP[3]==0)) return false;
return true;
}
//-----------------------------------------------------------------
function DomainTxtOK(Dom)
{
return Dom.match(/((?!-)[a-z\d-]{1,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi)==Dom;
}
//-----------------------------------------------------------------
function DomainExtOK(Dom)
{
var tExt='ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az.ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.cr.cs.cu.cv.cx.cy.cz.de.dj.dk.dm.do.dz.ec.ee.eg.eh.er.es.et.fi.fj.fk.fm.fo.fr.fx.ga.gb.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gq.gr.gs.gt.gu.gw.gy.hk.hm.hn.hr.ht.hu.id.ie.il.im.in.io.iq.ir.is.it.je.jm.jo.jp.ke.kg.kh.ki.km.kn.kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz.na.nc.ne.nf.ng.ni.nl.no.np.nr.nt.nu.nz.om.pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.ps.pt.pw.py.qa.re.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.su.sv.sy.sz.tc.td.tf.tg.th.tj.tk.tm.tn.to.tp.tr.tt.tv.tw.tz.ua.ug.uk.um.us.uy.uz.va.vc.ve.vg.vi.vn.vu.wf.ws.ye.yt.yu.za.zm.zr.zw.com.edu.gov.int.mil.net.org.biz.pro.info.aero.name.coop.arpa.nato.museum'.split(".");
var Ext = Dom.substr(Dom.lastIndexOf(".") + 1).toLowerCase();
for (var i=0; i<tExt.length; i++) {if (Ext==tExt[i]) return true;}
return false;
}
//-----------------------------------------------------------------
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
6 avril 2005 à 22:28
précises à qui tu parles sivispacem, j'ai cru ke ca m'était adressé. Si c'est la cas, c'est que tu n'a pas testé mon expression car xx@xx ou xx@xx, çà ne passe pas chez moi, même si je n'ai pas mis de backslash devant le point. d'ailleurs voilà ma fonction de contrôle de emails, un peu lourde, mais efficace :

function EmailValide(email)
{
/* 1) On vérifie que le formatage de l'email est correct
On déclare une variable qui correspond à une expression régulière.
L'email doit contenir
*/
var FormatValide = false;
var ExpressionReguliere = /^[a-zA-Z0-9]+((\.?|-?|_?)[a-zA-Z0-9]+)*@[a-z0-9]+([-_]?[a-z0-9]+)?(.[a-z0-9]{2,}){1,2}$/;
if (email.search(ExpressionReguliere) != -1)
{
FormatValide = true;
}

// 2) On cherche à déterminer si le domaine de l'e-mail est valide

var DomaineValide = false;
var PositionDernierPoint = email.lastIndexOf(".");
var PositionDernierArobase= email.lastIndexOf("@");
// Si il y a un point, une arobase, et que le denrier point est situé après l'arobase
if ((PositionDernierArobase > 0) && (PositionDernierPoint > 0 ) &&
(PositionDernierArobase < PositionDernierPoint))
{
// Variable qui contient la liste des extensions de domaines existant
var ListeExtensionsDomaines = 'ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az.ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.cr.cs.cu.cv.cx.cy.cz.de.dj.dk.dm.do.dz.ec.ee.eg.eh.er.es.et.fi.fj.fk.fm.fo.fr.fx.ga.gb.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gq.gr.gs.gt.gu.gw.gy.hk.hm.hn.hr.ht.hu.id.ie.il.im.in.io.iq.ir.is.it.je.jm.jo.jp.ke.kg.kh.ki.km.kn.kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz.na.nc.ne.nf.ng.ni.nl.no.np.nr.nt.nu.nz.om.pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.ps.pt.pw.py.qa.re.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.su.sv.sy.sz.tc.td.tf.tg.th.tj.tk.tm.tn.to.tp.tr.tt.tv.tw.tz.ua.ug.uk.um.us.uy.uz.va.vc.ve.vg.vi.vn.vu.wf.ws.ye.yt.yu.za.zm.zr.zw.com.edu.gov.int.mil.net.org.biz.pro.info.aero.name.coop.arpa.nato.museum.EoF'
// Variable qui contient la liste des extensions de domaines précédente sous forme de tableau
var TableauExtensionsDomaines = ListeExtensionsDomaines.split(".")
/* Variable qui contient l'extension de l'email saisi par l'utilisateur (on récupère la chaîne
située après le dernier point) */
var ExtensionEmail = email.substr(PositionDernierPoint+1)
// On convertit l'extension en minuscuel (des fois qu'elle contienne des majuscules)
ExtensionEmail = ExtensionEmail.toLowerCase()
// Pour chaque extension de domaine
for (i = 0; i < TableauExtensionsDomaines.length; i++)
{
// Si on arrive à la fin de la liste des extensions de domaines
if (TableauExtensionsDomaines == 'EoF')
break; // On sort de la boucle
// Si l'extension de l'email correspond à une extension de domaine de la liste
if (ExtensionEmail == TableauExtensionsDomaines[i])
{
DomaineValide = true // C'est que le domaine est valide
break; // On sort de la boucle
} // Fin if (intérieur boucle)
} // fin boucle for
} // Fin if (1er if)
return (FormatValide && DomaineValide);
}

jla posteré en source plus tard. Par contre, comment fair epour autoriser les caractères accentués mais pas les autres du style ] ??? j'ai trouvé çà nul par, c possible??? au revoir
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
6 avril 2005 à 17:43
marche pas
rappel : le point signifie tous caractère sauf le
le caractère nouvelle ligne.
pour coder le point lui même il faut utiliser \.
donc ton expression laisse passer n'inporte quoi.
essaye : xx@xx, ça passe.
essaye
[a-z\d][a-z\d-]{0,62}[a-z\d]\.[a-z]{2,6}
pour le domaine et le tld
ou
(?!-)[a-z\d-]{1,62}[a-z\d]\.[a-z]{2,6}
plus court
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
6 avril 2005 à 17:23
voila version finale (enfin j'ai pas trouvé d'erreur en faisant les tests mais j'en ai pt être oublié) :

/^[a-zA-Z0-9]+((\.?|-?|_?)[a-zA-Z0-9]+)*@[a-z0-9]+([-_]?[a-z0-9]+)?(.[a-z0-9]{2,}){1,2}$/

je sais que l'expression est un peu longue et qu'il y a surement moyen de "factoriser" çà, mais bon, a part çà qu'en pensez vous?
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
6 avril 2005 à 16:47
Deuxième version un peu améliorée

/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(.[a-z0-9]{2,}){1,2}$/

mais j'ai toujours le pb du -@-.com qui passe
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
6 avril 2005 à 16:25
terminer par \.[a-z]{2,6} pour les nationaux
à .museum
on peut aussi coder la partie domaine
par l'adresse IP entre crochets, cela donne
[(\d{1,3}\.){3}\d{1,3}\]
il manque ici l'interdiction de dépasser 255.
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
6 avril 2005 à 15:47
ok merci. Puisque chacun y va de son expression régulière pour le contrôle d'un mail, je me lance aussi. Elle me paraît plus simple à comprendre, enfin c'est question de goût :-D

/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+.[a-z0-9]+$/

Voila c pa encore tt à fait çà car -@-.x est accepté... ms bon c un debut. a + tchao
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
6 avril 2005 à 15:42
pas bon le code :
laisse passer : .___@---__----___----.fr__ comme adresse.
erreur de débuter avec un point, un nom de domaine avec
caractères interdits.
à rappeler:
- Un nom de domaine doit comporter entre 2 et 63 caractères (les x.com et z.com sont bloqués et redirigés)
- Il ne peut comporter que des lettres, des chiffres et (n'importe où sauf en première ou en dernière position) le signe "-".
Donc _ interdit !
Le TLD ne doit contenir que des caractères, et de 2 (nationnaux) à 6 (museum).
Voir http://www.iana.org/gtld/gtld.htm
cs_reblochon Messages postés 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 septembre 2004
6 avril 2005 à 14:49
1) aucune. C'est juste une facon differente de coder.
2) Arobas unique et oui c'est pris en compte.

regarde ici: http://www.webreference.com/js/column5/
et là: http://pages.videotron.com/glopglop/local/help_expression01.html (source: ancien site developer.netscape.com)

c'est en anglais mais les exemples sont assez clair et simple. Et il y a des tableaux recapitulatifs. De toute facon, tu devrais aujourd'hui trouver un paquet de sites francais expliquant ceci de facon clair. Apres le mieux, c'est de se faire une petite page local avec deux trois champs permettant de tester rapidement les resultats donc facilitant l'apprentissage.

Exemple:
http://pages.videotron.com/glopglop/local/expression_light.html

Tape dans le premier champ \\d+
Puis selectionne le checkbox flag "g" et le checkbox "Dynamique"
Ecris dans le deuxieme champ une serie de lettres et de chiffres au hasard (plusieurs qui se suivent, puis separés)

Tu devrais voir le resultat d'un match (selectionné par defaut dans le select) dans le textarea en dessous.

bon courage, ce n'est pas si dur que ca à assimiler et c'est si pratique.
lordskyser1 Messages postés 84 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 1 juillet 2006
6 avril 2005 à 00:14
oula vous etes balèzes vous en expression régulières vous! bravo! j'essaie de les comprendre par moi même mais ce n'est pas évident à vrai dire. J'aurais juste une paire de questions :
1) qui a proposé la meilleure solution? (à mon niveau je n'arrive pas à juger c'est trop complexe).
2) Est-ce qu'une adresse mail ne doit contenir qu'une et une seule arobase??? si c'est le cas, ces expressions régulières en tiennent elles compte? Sinon comment faire pour intégrer cela?
Voilà, j'espère que quelqu'un aura l'amabilité de me répondre, çà m'aiderai d'autant plus que je dois vérifier la validité d'un email pour un tp a rendre après demain!

à part çà, pour contrôler la validité du domaine, vous pouvez stocker la liste suivante dans une variable, la transformer en tableau avec chaine.split(".") puis tester si l'extension de l'email (récupérée avec chaine.substr(chaine.lastIndexOf("."))) correspond à une extension existante :

ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az.ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.cr.cs.cu.cv.cx.cy.cz.de.dj.dk.dm.do.dz.ec.ee.eg.eh.er.es.et.fi.fj.fk.fm.fo.fr.fx.ga.gb.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gq.gr.gs.gt.gu.gw.gy.hk.hm.hn.hr.ht.hu.id.ie.il.im.in.io.iq.ir.is.it.je.jm.jo.jp.ke.kg.kh.ki.km.kn.kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz.na.nc.ne.nf.ng.ni.nl.no.np.nr.nt.nu.nz.om.pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.ps.pt.pw.py.qa.re.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.su.sv.sy.sz.tc.td.tf.tg.th.tj.tk.tm.tn.to.tp.tr.tt.tv.tw.tz.ua.ug.uk.um.us.uy.uz.va.vc.ve.vg.vi.vn.vu.wf.ws.ye.yt.yu.za.zm.zr.zw.com.edu.gov.int.mil.net.org.biz.pro.info.aero.name.coop.arpa.nato.museum

jpense que vous aviez déjà trouvé çà, mais bon, il peut toujours être utile de le rappeler, enfin a vous de voir.

Bonne continuation, un newbie anonyme
michel_roger Messages postés 60 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 18 août 2006
11 déc. 2004 à 01:10
Merci beaucoup pour l'explication finale, très utile car g toujours été une brêle en expression régulières ;-)
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
13 nov. 2003 à 02:40
Super ma réponse est même pas parvenue. Bon je vais faire plus court :
1) Les tokens ctait pour juste extraire le nick/host sans vérifier l'email. Désolé d'en avoir parlés s'ils n'existent pas en js.
2) Merci pour les address en une lettre je connaissait pas, ca m'a fait pensé a l'histoir des ip (on peut avoir entre 0 et 9) donc l'extention en 1 caractere doit exister aussi
3) Loin d'être rancunier, c que j'aime pas me prendre la tete dans un language que je ne maîtrise pas et que je n'ai pas l'interêt d'apprendre actuellement, c tout.

*esquive la bise et serre la main de Philippe*
Toute nouvelle connaissance est toujours bonne à prendre aussi merci pour ta participation ^^
cs_reblochon Messages postés 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 septembre 2004
7 nov. 2003 à 21:53
oui ca retourne valide, car j'ai encore oublié de mettre deux backslach pour que ca en affiche un sur ce forum. donc avant le \w{2,4} il faut lire \.\w{2,4} au lieu de .\w{2,4}

Pour repondre au insinuation:
1- Le site date d'avant mes etudes en info. J'etais amateur novice
je ne l'ai jamais refait car j'ai autre chose à faire de plus constructifs que d'afficher mes affaires persos qui je suis sur passionnent le monde entier.

2- Sur le site, les outils developpés pour tester le code ont ete fait rapidement pour repondre à un besoin, ils sont fonctionnels, pas esthetiques, ni convivials, donc parfait pour l'utilité prevue.

3- je pense que 3 ans de dev dans un grand groupe americain (SUNGARD) pour des sites reservés aux brokers (courtiers), avec le niveau de securité, de serieux et d'importance (plusieurs millions de transactions sql par heure) qu'on peut imaginer dans le milieu de la bourse, doivent quand meme me donner le niveau de professionnel en web. Toutes secondes perdues dans un code lourd, c'est des millions qui ne sont pas negociés. Pour te dire, ils ne gardent que les meilleurs, c'est pour ca que j'ai ete viré. Je suis en dessous des meilleurs. Ce qui fait quand meme de moi, je pense, un bon programmeur professionnel, sinon je n'aurais jamais tenu 3 ans avec en plus les compliments de mes superieurs pour mon travail.

4-On est ici dans javascriptfr. Les tokens dont tu parles, c'est dans PHP si je ne me trompe! Tu parles d'utiliser @ comme separateur, j'en conclu qu'il va y avoir une ligne de plus, de toute facon. Mais c'est vrai que j'ai fait un hors sujet. desolé pour ce point. Et j'apprecie ton initiative de faire decouvrir les Expressions, car c'est en effet depassé les verifications de chaines, en 18 lignes de if imbriqués. Ne pas trop abuser des "Reg"s quand meme car les fonctions natives du JavaScript sont bien plus rapides pour des besoins simples.

5- pour repondre à sivispacem: il exixte des sites x.xxx donc il existe des adresses xxx@x.xxx, donc ton code est en effet mieux structuré car il permet comme tu le dis si bien de repondre aux mails:
de type minimum : x@x.xx
et de type maximum : n(nx.)nx@n(nx.)xxx

exemple:http://www.x.com/ ou http://www.z.com/

Je ne suis pas vexé et ne souhaite pas t'irriter, j'aime bien argumenter, c'est tout.
Toujours pret pour critiquer et etre critiqué (c'est comme ca qu'on evolue)

grosses bises
Philippe

Ps: je vais voir si j'ai pas du temps pour refaire mon site. Je pense qu'il merite mieux en effet.
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
27 oct. 2003 à 17:45
"etant donné que c'est deja fait au moment de l'evaluation" <== wé ca c si on veut faire les 2 en meme temps, ce qui est d'autant plus hors sujet :)
Soit disant passant, ton "sans forcé et faire le mariole" hé ben oups j'ai oublié le . et ca donne test@mailcom valide ...
bon ok je fait des chichi aussi, d'un autre coté j'ai donné ce code en démonstrations pour faire >>découvrir<< les expressions régulières aux nombreuses personnes qui ont postés des vérification de mail avec des tonnes de if avant moi. D'une manière générale la qualité du site est pas trop recommandés pour un niveau professionnel mais bon, c toi qui vois ...
cs_reblochon Messages postés 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 septembre 2004
25 oct. 2003 à 05:34
Tu as raison pour le point entre deux crochets. on en apprend tous les jours, je vais me coucher heureux et moins con (toujours ca de gagné).

Mon code n'apporte rien techniquement, je disais simplement qu'on n'ecrit pas vraiment la combinaison complete [a-zA-Z0-9_] quand elle se resume par \w

c'est beaucoup de chichi pour si peu. Pour le fonctionnement c'est identique, mais la ou je bosse, ca fait la difference entre un employé et un ex-employé. En plus ta methode est si complexe que tu est obligé d'appeler un reg2 pour un deuxieme test.

Je sais que ce n'etait pas le but de ton code de sortir le nick et le domaine. Mais ce n'est pas plus facile avec les tokens etant donné que c'est deja fait au moment de l'evaluation et qu'il ne reste plus qu'à appeler les RegExp.$

En 2 ligne sans forcé et faire le mariole:
function is_email(email) {
return /^((?:\w+(?:\-|\.)?\w+)+)\@((?:\w+(?:\-|\.)?\w+)+.\w{2,4})$/.test(email); }

bonne soiree
Philippe
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
24 oct. 2003 à 18:21
En réponse à reblochon :
Effectivement on doit pouvoir utiliser des jokers pour les tests standards (caractère alphabétique, alphanumérique, etc.). D'un autre coté comme t a peut près aussi clair que sivispacem juste au dessus, j'ai pas compris ce que ton code apporte en plus (à propos, le . n'est pas un caractère quelconque s'il est mis dans les [] justement, relis les explications).
Pour ce qui est des fournisseurs qui ont un ip fixe mais pas de domaine, j'en ai jamais vu, mais si ca peut te rassurer, ils marchent avec mon code puisque l'extension est en [a-zA-Z0-9]{2,4} donc avec des chiffres aussi.
Pour ce qui est des sortir le domaine et le nick du mail, ceci n'est pas le but de mon code ; de plus, on peut le faire beaucoup plus simplement en utilisant les tokens (en utilisant @ comme séparateur).
Voilà ++ <== Je deviens sénile
cs_reblochon Messages postés 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 septembre 2004
20 oct. 2003 à 03:27
ok j'ai compris pourquoi c'est plein de fautes.
au niveau QI, je suis une moule...

gnagnagna...dans une string il faut mettre deux backslash pour en afficher un!!...gnagnagna
Deuxieme essai:

re= /^((?:\w+(?:\-|\.)?\w+)+)\@((?:\w+(?:\-|\.)?\w+)+.\w{2,4})$/

juste pour info [a-z0-9] et [\-\_] = [\w] et [\-] le _ est considéré comme un char alphanumerique [a-zA-Z0-9_]

En dernier lieu, le point . en expression reguliere represente n'importe quel char c'est egal à [\w\W]. Pour mettre un point il faut le noter [\.]

maintenant je vais me coucher le cerveau, il est mourru...
cs_reblochon Messages postés 49 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 27 septembre 2004
20 oct. 2003 à 03:21
Que de chichi
re= /^((?:w+(?:-|.)?w+)+)@((?:w+(?:-|.)?w+)+.w{2,3})$/
avec ca et un test on peut en plus resortir le nom avec RegExp.$1 et le domaine avec RegExp.$2

juste pour info [a-z0-9] et [-_] = w et - le _ est considéré comme un char alphanumerique [a-zA-Z0-9_]
je ne l'ai pas mis non plus, mais les gens qui n'ont pas un nom de domaine comme une adresse IP ??? ils font comment pour mettre leur email ??? ___toto-le-banit___@90.60.25.15 :o(

En dernier lieu, le point . en expression reguliere represente n'importe quel char c'est egal à [wW]. Pour mettre un point il faut le noter [.]


Je n'ai pas envie d'expliquer comment fonctionne la page qui suit mais si ca interesse du monde, elle permet de faire des test tres pratique sur les expressions regulieres en direct et simplement:
http://pages.infinit.net/glopglop/local/expression.html
Les exemples ne sont vraiment pas à jour. et les aides viennent majoritairement de devedge.netscape.com
cs_sivispacem Messages postés 26 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 4 octobre 2006
18 sept. 2003 à 13:09
Pourquoi pas :
function EmailOK(sMail)
{
var re = /([a-z0-9]+([-_]?[a-z0-9]+)*.)*[a-z0-9]+([-_]?[a-z0-9]+)*@([a-z0-9]+([-_]?[a-z0-9]+)*.)+[a-z]{2,4}/gi;
return (sMail.value.match(re) == sMail.value);
}

Pour les email de type minimum : x@x.xx
et maximum : n(nx.)nx@n(nx.)xxx

Je ne sais pas s'il existe des courriels de la forme x@x.xx !
@+
Sylvaninox Messages postés 2 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 25 mai 2003
25 mai 2003 à 20:27
ah oui effectivement j'avais pensé à ça !

Merci bcp de ta réponse !

@+
cs_Melnofil Messages postés 71 Date d'inscription dimanche 23 juin 2002 Statut Membre Dernière intervention 1 février 2008
25 mai 2003 à 19:50
tout simplement parsque le nom du fournisseur (et le nom d'utilisateur aussi !) peut contenir des . d'ailleurs regarde bien le point est caché entre le 9 et le _ :
[a-zA-Z0-9._-]{2,}
De plus ne sont pas valides les adresses du style xx..xx@xxx.xxx ou xxx@xx..xx.xxx avec deux points de suite.
Voilà ++
Sylvaninox Messages postés 2 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 25 mai 2003
23 mai 2003 à 20:33
Je ne vois pas bien en quoi le reg2 est indispensable !?
En effet, dans le reg(1) il y a déjà la contrainte d'au moins 2 caractères "{2,}" après le @.
L'@ et le . ne peuvent donc pas être collés !

Dites-moi si je me trompe parce que sinon y'a un truc ke j'ai pas compris :-)

A part ça c'est une très bonne solution pour vérifier la validité d'un mail !
VirtualReckless Messages postés 12 Date d'inscription jeudi 31 octobre 2002 Statut Membre Dernière intervention 14 novembre 2002
9 nov. 2002 à 18:44
bien...bien...on vas voté pour un nivo 4 hein ;p
nan serieu bon code et bonne explication
heu p'tite annoce qu'a rien avoir mais bon... : vous petez pas les couilles a trouver un hébergeur k'accepte la fonction email(........) en php, multimania l'accepte.
allez ++
scantoine Messages postés 1 Date d'inscription lundi 1 juillet 2002 Statut Membre Dernière intervention 8 août 2002
8 août 2002 à 09:33
super le code et avec les explications en plus c cool
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
24 juin 2002 à 22:46
Pas mal ton code.
Un peu complexe pour les débutants mais puissant.

F___
Rejoignez-nous