Aller au contenu

expreg email


Sujets conseillés

Posté (modifié)

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
Posté

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).

Posté

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)

Posté

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 ;)

Posté

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 !

Posté

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.

Posté

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.

Veuillez vous connecter pour commenter

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



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