8791 sujets

Développement web côté serveur, CMS

Salut,

J'ai une application dans laquelle j'aimerais valider une addresse mail à
l'inscription de l'utilisateur. J'ai deux question:

1 - Il est généralement conseillé de les valider par regex ? DNS ? SMTP ?
Pour moi le plus propre serait de requeter le SMTP avec Ajax, mais j'en
suis pas sur, je me dis aussi que ca pourrait générer du traffic pas
forcemment pertinent.

2 - Si la regex est conseillée, d'un coté j'aimerais que ca soit pas celle
qu'on trouve sur la plupart des sites et qui, par exemple, ne valide pas
test+alias@test.com et encore moins "test test"@test.com mais
.test@test.com oui, et d'un autre coté j'aimerais éviter d'avoir à
implementer celle proposée par la RFC
Dans ce cas existe-t-il un compromi conseillé ?
Modifié par Glide (22 Aug 2008 - 11:59)
Glide a écrit :
Salut,

J'ai une application dans laquelle j'aimerais valider une addresse mail à
l'inscription de l'utilisateur. J'ai deux question:

1 - Il est généralement conseillé de les valider par regex ? DNS ? SMTP ?
Pour moi le plus propre serait de requeter le SMTP avec Ajax, mais j'en
suis pas sur, je me dis aussi que ca pourrait générer du traffic pas
forcemment pertinent.

2 - Si la regex est conseillée, d'un coté j'aimerais que ca soit pas celle
qu'on trouve sur la plupart des sites et qui, par exemple, ne valide pas
test+alias@test.com et encore moins "test test"@test.com mais
.test@test.com oui, et d'un autre coté j'aimerais éviter d'avoir à
implementer celle proposée par la RFC
Dans ce cas existe-t-il un compromi conseillé ?


il y a des regex qui répondent à tous tes critères.
^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+\.[a-zA-Z]{2,4})$


- commence par une lettre ou un chiffre
- est suivit de lettres / chiffres / points / tirets
- @
- domaine
- .
- extension
Merci mais cette regex ne valide pas test+alias@test.com
Si je me trompe pas

(d'ailleur je me suis trompé ici)
glide a écrit :
[...]mais .test@test.com oui[...]

C'est valide ca en fait

Bon pour l'instant j'ai fait ca
^[\w.]+[+-.]?[\w.]+@[\w.]+\.[a-z]{2,4}$

Mais je suis sur qu'il y a mieux
Modifié par Glide (22 Aug 2008 - 12:23)
Glide a écrit :
Merci mais cette regex ne valide pas test+alias@test.com

C'est valide les + dans les emails ?
dans ce cas :
^([a-zA-Z0-9]+(([\.\-\_\+]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+\.[a-zA-Z]{2,4})$
Celle-la permet d'avoir plusieur + dans la partie gauche
ce qui n'est pas permi à priori.
D'un autre coté si on voulait gérer
rfc0822 a écrit :
     address     =  mailbox                      ; one addressee
                 /  group                        ; named list

     group       =  phrase ":" [#mailbox] ";"

     mailbox     =  addr-spec                    ; simple address
                 /  phrase route-addr            ; name & addr-spec

     route-addr  =  "<" [route] addr-spec ">"

     route       =  1#("@" domain) ":"           ; path-relative

     addr-spec   =  local-part "@" domain        ; global address

     local-part  =  word *("." word)             ; uninterpreted
                                                 ; case-preserved

     domain      =  sub-domain *("." sub-domain)

     sub-domain  =  domain-ref / domain-literal

     domain-ref  =  atom                         ; symbolic reference

On serait obligé d'utiliser ce genre de regex, ce que je voulais éviter
Mais la question c'etait aussi de savoir si c'etait pas plus simple d'interroger les SMTP en général

PS: petite question qui n'a rien à voir: pourquoi le smiley \:\( est interprété dans la balise \[code\] ? (strippez les \ pour votre propre interpretation \:)
genre
 [decu]
Hello,

cakePHP utilise celle-ci :
/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]{2,4}|museum|travel)$/i

Je n'ai pas eu de problème avec, mais j'avoue ne pas m'être particulièrement penché sur la question.

Pour tester son existence ensuite je ne pense pas qu'Ajax soit la solution la plus propre, ça te demanderait de tester avant la validation de la page, donc de ne pas pouvoir profiter de la regexp pour conditionner le test...
Par contre en faisant un tour du coté de gethostbynamel il doit y avoir une solution PHP.

Et pour finir oui, les smileys et les autres [ i] sont interprétés dans les [ code], ce n'est pas très pratique.
Tymlis a écrit :
Hello,
cakePHP utilise celle-ci :
/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]{2,4}|museum|travel)$/i


Ça m'a l'air pas mal

Tymlis a écrit :
Pour tester son existence ensuite je ne pense pas qu'Ajax soit la solution la plus propre, ça te demanderait de tester avant la validation de la page, donc de ne pas pouvoir profiter de la regexp pour conditionner le test...

Je pensais l'implémenter en JS

Tymlis a écrit :
Par contre en faisant un tour du coté de gethostbynamel il doit y avoir une solution PHP.

Merci

Tymlis a écrit :
Et pour finir oui, les smileys et les autres [ i] sont interprétés dans les [ code], ce n'est pas très pratique.


Apparemment même pas tous les smileys Smiley smile
:)  [decu] [cligne] :'( :| :O [langue]

Ca m'a tout l'air d'être géré à coup de cas particuliers
Glide a écrit :
Je pensais l'implémenter en JS

Je ne peux que t'inciter à faire ce genre de vérifications coté serveur, c'est plus sûr, ton utilisateur aura peut-être javascript de désactivé.
bonjour ,
a titre d'information :
la "recommandation" en cours +
errata


concernant les validation des emails (et autres) je commence à utiliser de plus en plus les

filtres php (à partir de 5) coté serveur donc ...
Modifié par kzone (24 Aug 2008 - 19:25)
Modérateur
Salut,

Tu as deux solutions pour valider une adresse mail. La première est une expression régulière, la seconde est une fonction PHP.

1.


if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{3,}\.[a-z]{2,4}$#" , $email))
   $errmsg[] = 'Votre adresse courriel n\'est pas valide.';



2. source de la fonction


if(!filter_var($email, FILTER_VALIDATE_EMAIL))
   $errmsg[] = 'Votre adresse courriel n\'est pas valide.';



++
Modifié par Nolem (24 Aug 2008 - 20:32)
Excellent, je connaissais pas cette nouvelle fonction filter_var()
Merci pour vos réponses