8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,
J'ai une question concernant une regexp qui me permet de vérifier la validité d'un email dans un champ texte. La difficulté c'est que l'utilisateur a le droit de rajouter une ou plusieurs adresses mail séparées par ";"

Voici ma reg à l'heure actuelle :
var reg =  new RegExp("^([a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}[;]?)+$","gi");


Mes problèmes comme elle est là, c'est que l'on peut insérer une adresse avec deux points qui se suivent (ex : toto@marche..com ou toto..tata@marche.com)
Mon deuxième problème est qu'il est possible pour le moment de mettre une adresse suivit d'un ";" sans rajouter une autre adresse (ex : toto@marche.com; )

Si quelqu'un à une idée pour solutionner ce(s) problème(s), Merci d'avance
Salut,

nash01 a écrit :
Mes problèmes comme elle est là, c'est que l'on peut insérer une adresse avec deux points qui se suivent (ex : toto@marche..com ou toto..tata@marche.com)
Tu peux par exemple remplacer
[a-z0-9._-]+@
par
[a-z0-9_-]+(\.[a-z0-9_-]+)?@
(même technique pour la droite de l'arobase).

a écrit :
Mon deuxième problème est qu'il est possible pour le moment de mettre une adresse suivit d'un ";" sans rajouter une autre adresse (ex : toto@marche.com; )
Hmm, t'as moyen de faire un truc style
taRegexEntière(;taRegexEntière)*
mais si tu veux moins long, tu peux peut-être terminer ta regex par :
(;[^$]+)*$
Par contre, ça empêchera seulement que t'aies un point virgule terminant ta regex (s'il y a une lettre qui suit, ce sera considéré comme bon Smiley murf
Salut,
nash01 a écrit :

Mon deuxième problème est qu'il est possible pour le moment de mettre une adresse suivit d'un ";" sans rajouter une autre adresse (ex : toto@marche.com; )

En plus de ce que te propose marcv, tu peux ensuite éclater la chaine dans un tableau à l'aide de la fonction preg_split et ainsi vérifier pour chaque élément du tableau si c'est bien une adresse mail.

Exemple:

$adr = preg_split(';', $ta_chaine, -1, PREG_SPLIT_NO_EMPTY);
foreach ($adr as $val) {
  // test à l'aide de l'expression régulière
  if (ereg($pattern, $val) == false) {
    // action
    [...]
  }
}

J'éspère que cela t'aidera Smiley cligne