Aller au contenu

expreg email


_seb

Sujets conseillés

Pour vérifier si une adresse email, soumise via un formulaire, ressemble à une adresse valide, j'ai pensé à cette expression regulière :

preg_match('!^[a-zA-Z0-9\.\-_]{1,}@[a-zA-Z0-9\.\-_]{1,}\.[a-z0-9\.]{2,}$!',$email)

Qu'en pensez vous ? Y a t-il un risque de bloquer des emails valides , de laisser passer des invalides ...

Si vous voulez tester en live : test

( J'ai biensure fais une recherche sur le web mais les premiers résultats donnaient des expressions qui me paraissait pas très justes ...)

Modifié par ___seb
Lien vers le commentaire
Partager sur d’autres sites

Limite la taille du TLD :

test@site.aaaaaaaaaaaaaaaaaaaaaaaaaaaa est valide.

La grande limite est 6 (.travel, .museum, à ma connaissance très très très peu utilisés...).

Je crois même que les noms de domaine sont limités à 64 caractères (à vérifier).

Lien vers le commentaire
Partager sur d’autres sites

merci

effectivement, d'après wikipedia, le label (partie avec l'extension) ne doit pas excéder 63 caractères.

Parcontre pour les extensions, il y a aussi .asso.fr, donc 7 caractères, je viens d'y penser mais ce n'est pas une extension de premier niveau (top level), il y a un point dedans.

J'avais jamais vu de .museum et .travel mais ils sont bien dans la liste officielle de l'ICANN que je viens de trouver.

preg_match('!^[a-zA-Z0-9\.\-_]{1,}@[a-zA-Z0-9\.\-_]{1,63}\.[a-z0-9\.]{1,6}$!',$email)

Lien vers le commentaire
Partager sur d’autres sites

Salut

asso.fr est une fausse extension, dont l'utilité tient à une convention de nommage des associations (encore que ce ne soit pas respecté par toutes les associations).

Mais le vrai TLD de bidule.asso.fr est bien .fr

Sinon, il est effectivement utile de limiter les TLD à 6 lettres maximum, mais fixe le minimum aussi (c'est-à-dire 2).

Sinon tel quel, une adresse "machin @ truc.a" passera.

Il existe un fichier Javascript très complet pour ce genre de choses. Je te conseille de t'en inspirer pour ta protection serveur: http://phnk.com/blog/?2004/01/28/7-votre-e...nest-pas-valide

Bon courage ;)

Lien vers le commentaire
Partager sur d’autres sites

oki, merci

Enfin, la vérification javascript est un peu sommaire quand même...

Sinon, il n'y a effectivement pas de TLD avec moins de 2 caractères.

Pour l'identifiant, avant l'arrobase, je vais mettre aussi une limite à 63 caractères, de toute façon il faudrait être un robot ou un 'pas net' pour choisir une adresse email avec autant de caractères !

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

J'aime bien cette fonction :

function is_valid_email_address($email){
$qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
$dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
$atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
$quoted_pair = '\\x5c[\\x00-\\x7f]';
$domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d";
$quoted_string = "\\x22($qtext|$quoted_pair)*\\x22";
$domain_ref = $atom;
$sub_domain = "($domain_ref|$domain_literal)";
$word = "($atom|$quoted_string)";
$domain = "$sub_domain(\\x2e$sub_domain)*";
$local_part = "$word(\\x2e$word)*";
$addr_spec = "$local_part\\x40$domain";
return preg_match("!^$addr_spec$!", $email) ? 1 : 0;
}

Source: http://iamcal.com/publish/articles/php/parsing_email

Certes elle n'est pas très "lisible", mais elle a l'avantage d'avoir été crée en fonction de la RFC 822 qui définit entre autres les spécificités et limites de la composition d'une adresse e-mail.

Bonne continuation.

Lien vers le commentaire
Partager sur d’autres sites

C'est pas très lisible effectivement !

Je suppose que 99,99 % des utilisateurs saisissent leur adresse email sous la forme addr-spec (cf document en lien), donc je ne vais pas m'embêter avec ça.

Par contre ça peut être utile dans d'autres contexte que le mien, pour un carnet d'adresse, une liste ...

merci.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...