74Fermer76
BrunniLe 24/02/2011 à 19:38
Pour continuer mon post précédent, plus d'infos ici:
http://www.regular-expressions.info/

Tu peux aussi essayer de construire une expression plus simple, mais pas totalement juste (au fond on s'en fout un peu; mais mieux vaut laisser passer des e-mails non valides que l'inverse wink). Voici le raisonnement:
1) Une adresse est décomposable en 2 groupes: ce qu'il y a avant le @, ce qu'il y a après.
2) Le nom d'utilisateur se compose de lettres minuscules et de symboles (mettons juste _ et . pour l'instant)
3) Le nom de domaine se compose d'un ou plusieurs noms, séparés par un point, suivi d'un nom de domaine. Exemple: hotmail.com, mail.hotmail.com (2 noms dans ce dernier).
Construisons donc le nom d'utilisateur: on veut des caractères minuscules, donc on écrit [a-z]. On veut permettre les chiffres (0 à 9) alors on rajoute: [a-z0-9]. On veut aussi le point et l'underscore, ça donne donc [a-z0-9._]. Il faut au moins un de ces caractères avant le @, donc on va utiliser l'opérateur +, mis à droite de l'expression pour signifier ça:
[a-z0-9._]+
Ensuite il faut un @, donc on rajoute:
[a-z0-9._]+@
Ensuite pour la partie de droite on veut la même chose, mais on aimerait quand même obliger à avoir au moins un point. Donc là c'est plus dur: on va juste permettre les caractères et l'underscore pour le domaine, et il en faut au moins un:
[a-z0-9_]+
Après ce "mot" il faut un point, avant le nom de domaine:
[a-z0-9_]+\.
(il faut précéder le point d'un \, cf la syntaxe)
Et ensuite il faut de nouveau un mot après le point, le .com/.fr/etc.
[a-z0-9_]+\.[a-z0-9_]+
Maintenant, ce petit groupe donne comme possibilité par exemple 'hotmail.com', 'mail.com' mais pas 'mail.hotmail.com' car on a un mot + un point + un mot. Alors on va permettre de répéter le 'mot.' à volonté, en en faisant un groupe:
([a-z0-9_]+\.)+[a-z0-9_]+
J'ai mis le mot suivi du point entre parenthèses pour en faire une sous-expression, et j'ai ajouté un + après pour dire qu'on veut ça 1 fois au moins. Ainsi il prendra 'hotmail.', mais aussi 'mail.hotmail.': c'est tout simplement 2 fois la même expression à la suite smile Ensuite il reste juste un mot: le com/fr/etc.
Et voilà on met tout ensemble et on a une expression qui fait pas tout mais qui est convenable, et au moins tu comprends pourquoi grin
[a-z0-9._]+@([a-z0-9_]+\.)+[a-z0-9_]+