Problème formulaire de contact PHP

Résolu
nob51 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -  
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je m'explique, j'ai un soucis avec mon formulaire de contact : lorsque l'on rentre une adresse au format adresse@domaine.tld celui ne marche pas, il faut que l'adresse de messagerie soit au format adresse.adresse@domaine.tld

Je ne sais pas d'où ça peut venir, j'ai regardé mes expressions régulières mais elles ont l'air correctes.

Le code :

elseif (!eregi("^([a-zA-Z0-9]+)([_\.-]+)([a-zA-Z0-9]+){1,}@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$",$_POST["son_mail"]))
{ // On vérifie si l'email est bien de la forme messagerie@domaine.tld
            $erreur="Votre adresse e-mail n'est pas valide...";
        }



Merci d'avance,
nob51




A voir également:

5 réponses

seebz Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   28
 
Si tu utilise PHP >= 5.2.0, tu peux utiliser la fonction filter_var() :

filter_var($email, FILTER_VALIDATE_EMAIL)
1
nob51 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   5
 
Effectivement j'utilise PHP5. Je dois donc remplacer l'expression régulière par le filtre?
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Tu peux, pas tu dois :-)
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Hello,

Peux-tu reformuler le problème : il faut que ce soit adresse.adresse@... ou au contraire tu veux que ça accepte nimportequoi@.... ??

Et as-tu marqué volontairement deux fois "adresse" ou bien cela peut-il être nimportequoi1.nimportequoi2@... ?

Parce que en effet, vu ta regexp tu as besoin de deux parties séparées par ., - ou _.
1
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Alors pas besoin de séparer, une classe [a-zA-Z0-9.-_] suffit largement. Après tout une adresse peut contenir plusieurs points !

"^([a-zA-Z0-9_\.-]+)@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$"

Pour info, tu oublies surement des cas d'adresse... Je te conseille de regarder le tutoriel PHP du site du zéro, dans lequel une regexp d'email est créée et elle est très efficace !
1
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
PS : je ne sais plus s'il faut échapper le point dans un [ ]...
0
nob51 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   5
 
Mince on a du taper le message en même temps j'ai eu la même réflexion que toi.
Merci Mihawk pour ton aide ;)!
0
nob51 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   5
 
Et bien je voudrais que l'on puisse mettre les deux types d'adresses, séparées ou non comme nimportequoi1.nimportequoi2@... ou nimportequoi1@
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nob51 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   5
 
Désolé du double post mais j'ai trouvé!
Il fallait supprimer le regexp qui comme tu me l'avais fait remarquer, demandait de séparer les partie par un point ou - ou underscore.

La solution :
elseif (!eregi("^([a-zA-Z0-9.]+)([a-zA-Z0-9]+){1,}@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$",$_POST["son_mail"]))
{ // On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Votre adresse e-mail n'est pas valide...";


Merci pour votre aide!
nob51
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Ouais mais alors là les tirets ne sont plus acceptés !!!
Quel intérêt de mettre une seconde fois la classe a-zA-Z0-9 ? C'est pas super propre !!
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Je te l'ai mis dans ma réponse en vert tout en haut.
0
nob51 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   5
 
Bon ce coup ci c'est bon!!
J'ai utilisé la seconde classe pour faire office de séparateur avec les _ et -. La bonne solution :
 elseif (!eregi("^([a-zA-Z0-9.]+)([-_a-zA-Z0-9]+){1,}@([a-zA-Z0-9]+).([a-zA-Z]+){2,4}$",$_POST["son_mail"]))
{ // On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Votre adresse e-mail n'est pas valide...";
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Je persiste à dire que c'est pas propre comme solution...
Deux classes quasiment identique mises l'un à la suite de l'autre (avec des + en plus) peuvent largement être regrouper.

De plus, quel intérêt de préciser {1,} à la fin alors que c'est exactement le rôle du + ?!!

^([a-zA-Z0-9.]+)([-_a-zA-Z0-9]+){1,} = ^[a-zA-Z0-9.-_]+
0