Problème formulaire de contact PHP

Résolu
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

5 réponses

  1. 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
    1. Contributeur
      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 !!
    2. Contributeur
      Je te l'ai mis dans ma réponse en vert tout en haut.
    3. 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...";
    4. Contributeur
      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.-_]+
  2. Contributeur
    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. Contributeur
      PS : je ne sais plus s'il faut échapper le point dans un [ ]...
    2. 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 ;)!
  3. Et bien je voudrais que l'on puisse mettre les deux types d'adresses, séparées ou non comme nimportequoi1.nimportequoi2@... ou nimportequoi1@
    1. Contributeur
      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. Si tu utilise PHP >= 5.2.0, tu peux utiliser la fonction filter_var() :

        filter_var($email, FILTER_VALIDATE_EMAIL)
        1. Effectivement j'utilise PHP5. Je dois donc remplacer l'expression régulière par le filtre?
        2. Contributeur
          Tu peux, pas tu dois :-)