Partage
  • Partager sur Facebook
  • Partager sur Twitter

Amélioration de REGEX vérification adresse mail.

On parle PCRE, SVP. POSIX, mettez vous à jour, SVP !

Anonyme
    11 novembre 2015 à 22:45:14

    Salut tous,

    J'ai un formulaire de contact sur lequel je vérifie la validité de l'adresse mail entrée.

    Si vous voulez l'adresse du formulaire pour tester sur place, il est ici : http://chez-oim.org/contact/

    Je fais la vérification à l'aide d'une REGEX dans une fonction que voici :

    function verif_mail($email)
    {
        $regex = '/^[^\W][a-zA-Z0-9\-\._]+[^\W]@[^\W][a-zA-Z0-9\-\._]+[^\W]\.[a-zA-Z]{2,6}$/'; 
        if(preg_match($regex, $email)) return TRUE;
        return FALSE;
    }
    


    Comme vous l'aurez remarqué, la REGEX est bien fournie et je ne vais pas vous laisser la décortiquer. Je vous la décompose :

    REGEX : ^[^\W][a-zA-Z0-9\-\._]+[^\W]@[^\W][a-zA-Z0-9\-\._]+[^\W]\.[a-zA-Z]{2,6}$

    En code : 

    /^[^\W][a-zA-Z0-9\-\._]+[^\W]@[^\W][a-zA-Z0-9\-\._]+[^\W]\.[a-zA-Z]{2,6}$/



    ^[^\W] :Le début du mail ne peut pas être autre chose qu'une lettre ou un chiffre.

    [a-zA-Z0-9\-\._]+ :Ensuite, les caractères de A à Z, 0 à 9, tiret(-), point(.) ou underscore(_) sont cherchés, quel que soient leur nombre. Minuscules et majuscules sont prises en compte. Il est demandé au moins un caractère.

    [^\W]@ :Avant le "arobase" (@) on ne peut pas avoir autre chose qu'une lettre ou un chiffre.

    -

    AVANT CETTE LIGNE, C'EST LE NOM DU MAIL. APRÈS, C'EST LE DOMAINE

    -

    @[^\W] :Après le "arobase" (@), c'est pareil. Une lettre ou un chiffre et rien d'autre.

    [a-zA-Z0-9\-\._]+ : Les caractères de A à Z, 0 à 9, tiret(-), point(.) ou underscore(_) sont cherchés, quel que soient leur nombre. Minuscules et majuscules sont prises en compte. Il est demandé au moins un caractère.

    [^\W]\. : Avant le point qui délimite le domaine du TLD, on ne veut pas autre chose qu'une lettre ou un chiffre.

    .[a-zA-Z]{2,6}$ : Ensuite, après ce point, on entre dans le TLD. Il peut être fait de 2 à 6 lettres minuscules ou majuscules.

    Les TLD deviennent "exotiques" et commencent à faire des kilomètres de long, j'ai limité à 6.


    Ma question :

    Comment améliorer cette REGEX ?

    Pour la partie de gauche, le nom du mail, il est possible de mettre, par exemple, alex...alex@

    J'aimerais une REGEX qui vérifie le principal sans non plus appliquer la norme concernant les adresses mail...

    Une REGEX simple et compréhensible me ravirait !


    Si vous avez des idées d'amélioration, j'attends vos avis avec grande impatience ! :)


    -
    Edité par Anonyme 11 novembre 2015 à 22:46:56

    • Partager sur Facebook
    • Partager sur Twitter
      11 novembre 2015 à 23:35:52

      Un bon résumé est dispo ici : http://www.regular-expressions.info/email.html
      • Partager sur Facebook
      • Partager sur Twitter
      Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
      Anonyme
        12 novembre 2015 à 0:10:42

        Merci pour le lien, je vais regarder ça et je te dis. :)

        Cependant, tu te doutes bien que je me suis renseigné un chouilla.

        Je suis même allé jusqu'à voir des classes chez github entièrement dévouées aux mails !

        Là, c'est vraiment trop. Manipuler des objets pour vérifier un mail, c'est "un peu" poussé.

        A de suite ! ;)

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 novembre 2015 à 0:16:31

          Me revoilà.

          Les 2 premières REGEX proposées sont pires que celle que j'ai créé. :(

          Il est possible d'écrire un mail sous la forme machin......@

          Ca pose donc un léger souci de validité.

          Ceci dit, je garde ton lien sous le coude pour voir si il ne pourrait pas m'inspirer. (il va falloir que je décode l'anglais...)

          Merci, Nightmat ! :)

          -
          Edité par Anonyme 12 novembre 2015 à 0:18:02

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            12 novembre 2015 à 1:27:39

            Bonjour.
            Pour le "user name" c'est à dire ce qui est à gauche de @ j'utilise ça :

            ~^[a-zA-Z]\w*([.&'_/\\\\-]\w+)*$~

            Mais on pourrait rajouter d'autres caractères séparatifs le + ou des caractères de ponctuations il me semble...
            Avec la règle ci-dessus j'autorise par exemple :
            C&A, Dupont&freres, mairie.Rosny\Bois, Auvers/Oise, n.guyen, o'sullivan, stade_de_france , etc...
            Néanmoins un séparateur unique n'est autorisé qu'entre chaque mot : Jean--Paul serait refusé....

            Le "domain name" (à droite de l'arobase) pose bcp moins de problème, car les règles d'écriture sont + strictes...

            -
            Edité par Anonyme 12 novembre 2015 à 9:50:37

            • Partager sur Facebook
            • Partager sur Twitter
              12 novembre 2015 à 7:57:24

              Le problème c'est qu'il n'existe aucune regex qui valide de manière parfaite les emails, et ce quelle que soit leur complexité.

              Donc en gros ce que tu cherches n'existe pas ; va falloir que tu fasses un compromis.

              • Partager sur Facebook
              • Partager sur Twitter
              Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
                12 novembre 2015 à 9:38:30

                Salut,

                Sépare tes classes de caractères et rajoute y un quantificateur. 

                https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2#/id/r-916989

                Ça donnerait un truc du genre pour la partie avant l'arobase.

                ^[a-z0-9]+([-._]?[a-z0-9]+)*
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  12 novembre 2015 à 12:37:17

                  ctkc a écrit:

                  Bonjour.
                  Pour le "user name" c'est à dire ce qui est à gauche de @ j'utilise ça :

                  ~^[a-zA-Z]\w*([.&'_/\\\\-]\w+)*$~

                  -
                  Edité par ctkc il y a environ 1 heure


                  Effectivement, en séparant les délimiteurs et les caractères, ça me donne une piste.

                  Tu interdis les mails qui commencent pas un chiffre ?

                  nightmat a écrit:

                  Le problème c'est qu'il n'existe aucune regex qui valide de manière parfaite les emails, et ce quelle que soit leur complexité.

                  Donc en gros ce que tu cherches n'existe pas ; va falloir que tu fasses un compromis.


                  Eh oui ! Le problème est là !

                  J'aurais bien trouvé une REGEX qui respecte parfaitement la norme je sais plus combien concernant la validité des emails, mais c'est une bestiole de 3 kilomètres de long ! o_O

                  Pour décortiquer ça, y a du boulot. En plus, la norme autorise des caractères vraiment bizarres que je n'ai jamais vu dans un mail.

                  Tooryst a écrit:

                  Salut,

                  Sépare tes classes de caractères et rajoute y un quantificateur. 

                  https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2#/id/r-916989

                  Ça donnerait un truc du genre pour la partie avant l'arobase.

                  ^[a-z0-9]+([-._]?[a-z0-9]+)*


                  Ton exemple n'est pas correct. Tu veux d'abord au moins une lettre ou un chiffre, ensuite, encore au moins une lettre et un chiffre mais pas de - ou . ou _

                  Ton tiret va générer une erreur. Il faut l'échapper ou le placer à la fin.

                  Il faut également échapper le point, sinon tu fais référence à n'importe quel caractère.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 novembre 2015 à 12:45:51

                    " Tu interdis les mails qui commencent pas un chiffre ? "

                    Oui il me semble que c'est interdit !... Me trompe-je ?...

                    Par ailleurs, dans une classe de caractères on n'échappe pas le ".", quant au"-" il se place au début ou à la fin...
                    Seuls les caractères "]" et "\" posent problème et pour cause...
                    Je te laisse méditer...

                    -
                    Edité par Anonyme 12 novembre 2015 à 12:49:11

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 novembre 2015 à 12:50:59

                      Re re,

                      Alors d'abord j ai testé mon exemple avant de te le donner hein :) il fonctionne bien...et il corrige ton souci de plusieurs points ou tirets a la suite.

                      Relis le passage sur les quantificateur que j ai t ai link plus haut...tu comprendra le +/?/*.

                      Pour ce qui est des métacaractères tu n'as pas à les échapper quand ils sont dans une classe de caractères ( entre crochets) sauf cas particuliers comme le tiret, qui doit être au début ou a la fin de ta classe...relis bien le cours c est bien expliqué.



                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        12 novembre 2015 à 12:54:33

                        Ah oui, merde ! C'est dans une classe... :honte: 

                        Je les échappe toujours par habitude, idem pour le tiret. C'est plus lisible.

                        Sinon, un mail peut commencer par un chiffre.

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          12 novembre 2015 à 13:11:19

                          Pour ceux que ça intéresse, voici la REGEX qui valide les mails en respectant la norme RFC 5322

                          Prenez une boite de Doliprane avant de regarder. :-° 

                          ^\A(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])\z$
                          

                          Et elle marche !

                          Mais bon, ça fait un peu Godzilla pour un simple mail...



                          -
                          Edité par Anonyme 12 novembre 2015 à 13:15:41

                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 novembre 2015 à 13:20:48

                            AlexB. a écrit:

                            J'aurais bien trouvé une REGEX qui respecte parfaitement la norme je sais plus combien concernant la validité des emails, mais c'est une bestiole de 3 kilomètres de long ! o_O

                            Pour décortiquer ça, y a du boulot. En plus, la norme autorise des caractères vraiment bizarres que je n'ai jamais vu dans un mail.

                            Celle de la RFC822 je suppose ; elle n'est même pas fiable à 100%.

                            Donc généralement, soit on trouve un regex simple et fonctionnelle (cf. mon premier post) soit on passe par une lib' dédiée à ça : https://github.com/egulias/EmailValidator

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
                            Anonyme
                              12 novembre 2015 à 13:34:14

                              Juste au dessus de ton post, j'ai trouvé la 5322. Si il y a plusieurs normes pour les mails, on va partir dans tous les sens...

                              Je ne vais pas me fatiguer et encore moins passer par ce qui est proposé sur Github (j'ai déjà vu EmailValidator).

                              Je vais isoler mes caractères spéciaux des autres pour qu'ils ne soient pas côte à côte dans une adresse et basta !

                              Celui qui rempli le formulaire et me laisse une adresse bidon ou mal formée, ben je n'y répondrai pas et c'est tout. ;) 

                              -
                              Edité par Anonyme 12 novembre 2015 à 13:37:59

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                12 novembre 2015 à 14:53:06

                                @ AlexB : Tu as raison pour le 1er caractère, il doit être alphanumérique... Donc 3-2-1-Partez@......ou 2-for-tea@.... devraient convenir.
                                En revanche, certains opérateurs n'accepteront pas d'enregistrer une adresse commençant par un chiffre... Orange par exemple...
                                D'autres opérateurs ont d'autres règles.... gmail et free, notamment sur l'utilisation du tiret ou de l'underscore...

                                -
                                Edité par Anonyme 12 novembre 2015 à 14:54:48

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  12 novembre 2015 à 15:00:08

                                  Sans déconner ?!

                                  Les FAI ont leurs propres "standards" maison ?

                                  Ben merde alors ! Mais ils se prennent pour qui pour s'affranchir des normes existantes ?!! :colere2: 

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    12 novembre 2015 à 15:09:25

                                    Oui mais c'est pas grave !...
                                    Ta regex va fonctionner quand même, et d'autant mieux que certains cas ne se présenteront jamais !...
                                    Qui peut le plus peut le moins... Non ?...

                                    -
                                    Edité par Anonyme 12 novembre 2015 à 15:13:53

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      12 novembre 2015 à 15:12:10

                                      Oui, bien sûr.

                                      Comme je l'ai dit tout à l'heure, si un rigolo me donne un mail tordu, je n'y répondrai pas.

                                      Je ne vais pas me faire des cheveux gris pour un formulaire de contact qui n'est pas vital, j'en ai bien assez comme ça ! ^^

                                      C'est juste un site web pour le plaisir que je possède, ce n'est pas une entreprise dont dépend ma vie. ;) 

                                      -
                                      Edité par Anonyme 12 novembre 2015 à 15:13:30

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        12 novembre 2015 à 15:19:27

                                        Mais t'en auras pas beaucoup d'adresses tordues !...
                                        Je viens de t'expliquer que justement les opérateurs font le ménage à l'inscription : Lors de l'enregistrement d'une adresse...
                                        En d'autres termes, ta regex fonctionnera d'autant mieux (qui peut le plus peut le moins), que bon nombre d'adresses farfelues ne pourront jamais être créées !...
                                        Capisco ?...

                                        -
                                        Edité par Anonyme 12 novembre 2015 à 15:23:11

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          12 novembre 2015 à 15:42:06

                                          Quand je parle d'adresse tordue, je parle du rigolo qui va remplir le formulaire et envoyer un message uniquement pour faire chier son destinataire, moi en l'occurrence.

                                          Mais contre les emmerdeurs, on ne peut absolument rien. ce n'est pas un contrôle mail qui va les arrêter, à plus forte raison si ils utilisent une adresse véritable appartenant à un "ami".

                                          Le principal, dans l'histoire, c'est d'avoir un contrôle captcha qui permet de s'affranchir des bots.

                                          Ensuite, est-ce que le mail entré est valide ou pas, on verra bien. Un contrôle basique suffit amplement.

                                          En plus, aujourd'hui, les navigateurs contrôlent très très simplement le texte entré si tu déclares un champ de formulaire input avec type="email".

                                          Ce n'est pas la panacée, mais les créateurs de navigateurs essayent quand même de faire un effort minime du côté du type des champs de formulaires.

                                          -
                                          Edité par Anonyme 12 novembre 2015 à 15:44:05

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 novembre 2015 à 16:08:30

                                            Vu la tournure de ce topic je n'ai pas l'impression que ce soit "basique" pour toi. Une solution basique, c'est de tester avec [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,} (insensible à la casse). Dès lors que ça ne suffit pas on ne pourra te donner aucune réponse puisque c'est à toi de définir quelle validation tu veux.

                                            -
                                            Edité par nightmat 12 novembre 2015 à 16:08:45

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
                                            Anonyme
                                              12 novembre 2015 à 16:08:35

                                              Si un rigolo veut polluer tes tables, ce n'est pas grave non plus !...
                                              Ta routine php de réception du formulaire doit envoyer un mail de confirmation. Donc dans la boîte mail du webmaster, les confirmations qui ont échoué vont lui être retournées...
                                              Via phpadmin ou par une petite transaction de l'espace administrateur, le webmaster flinguera les enregistrements indésirables...

                                              -
                                              Edité par Anonyme 12 novembre 2015 à 16:14:09

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                12 novembre 2015 à 16:18:33

                                                nightmat a écrit:

                                                Vu la tournure de ce topic je n'ai pas l'impression que ce soit "basique" pour toi. Une solution basique, c'est de tester avec [A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}(insensible à la casse). Dès lors que ça ne suffit pas on ne pourra te donner aucune réponse puisque c'est à toi de définir quelle validation tu veux.

                                                -
                                                Edité par nightmat il y a 2 minutes


                                                C'était juste pour voir si il y avait des propositions intéressantes, et il y en a eu. ;)

                                                C'est le but d'un lieux d'échanges, et je m'en suis servi. :)

                                                ctkc a écrit:

                                                Si un rigolo veut faire enregistrer une adresse bidon, ce n'est pas grave non plus !...
                                                Ta routine php de réception du formulaire doit envoyer un mail de confirmation. Donc dans la boîte mail du webmaster, les confirmations qui ont échoué vont lui être retournées...
                                                Via phpadmin ou par une petite transaction de l'espace administrateur, le webmaster flinguera les enregistrements indésirables...


                                                Oula ! On s'est mal compris.

                                                Il ne s'agit pas de confirmation suite à inscription ou autre.

                                                C'est un simple formulaire de contact, c'est tout. Si tu es déjà connecté au site, les champs "nom" et "mail" sont pré-remplis, c'est déjà ça de moins à faire pour la personne qui écrit.

                                                Sinon, il te faut le faire à la main.

                                                Ensuite, le mail est expédié à l'adresse mail du site en ayant comme adresse de réponse celle qui a été entrée dans le formulaire.

                                                Du coup, le mail ne risque pas de se perdre, son destinataire est toujours le même, c'est moi.

                                                L'adresse renseignée dans le formulaire est juste l'adresse à laquelle il faudra répondre.

                                                -
                                                Edité par Anonyme 12 novembre 2015 à 16:19:24

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  12 novembre 2015 à 16:24:36

                                                  Mais bien sûr que j'ai compris !...
                                                  Prends un site vitrine par exemple : Il n'y a pas d'inscription, néanmoins n'importe qui peut poser une question...
                                                  Si une confirmation est envoyée systématiquement à chaque question posée, le webmaster aura bien le retour des adresses farfelues !... Non ?...

                                                  -
                                                  Edité par Anonyme 12 novembre 2015 à 16:25:39

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    12 novembre 2015 à 16:38:31

                                                    Oui, je pourrais faire comme ça. Mais c'est trop contraignant pour l'internaute à mes yeux.

                                                    La personne qui veut écrire le fera, mais celle qui veut faire chier le fera une fois, deux fois, mais rarement plus.

                                                    C'est emmerdant de remplir un formulaire, même si des outils peuvent le faire à la place du gars qui n'aura qu'à faire le captcha.

                                                    En coulisses, il existe des "bidules" qui font des "trucs", mais tu comprendras que je le garde pour moi. ;) 

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      13 novembre 2015 à 18:57:02

                                                      @ Alex : Bonjour.
                                                      J'avais laissé la discussion en plan...
                                                      Il n'y a aucune contrainte pour l'internaute. En revanche côté webmaster, il vaut mieux anticiper en envoyant systématiquement un accusé réception afin d'éliminer par la suite les adresses mails farfelues ou mal orthographiées (ce qui peut arriver également)...
                                                      Voilà !...

                                                      -
                                                      Edité par Anonyme 13 novembre 2015 à 19:00:35

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        13 novembre 2015 à 19:02:00

                                                        Je n'ai pas ce souci d'accusé de réception vu que les mails me sont destinés.

                                                        Quoi que tu puisses mettre comme mail, le message est pour moi. C'est pour la réponse que je demande un mail.

                                                        C'est pour ça que je ne m'affole pas plus que ça. ;) 

                                                        -
                                                        Edité par Anonyme 13 novembre 2015 à 19:02:37

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          13 novembre 2015 à 19:08:03

                                                          Certes, mais tu vas répondre pour rien, puisque tu ne sauras pas que l'adresse mail est vérolée !...
                                                          Tandis que si ta messagerie t'informe que telle adresse n'a pu être atteinte, tu es tout de suite fixé !...
                                                          Non ?...

                                                          -
                                                          Edité par Anonyme 13 novembre 2015 à 19:08:55

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Anonyme
                                                            13 novembre 2015 à 19:12:32

                                                            L'adresse de réponse, je la vois.

                                                            Si le mec à mis n'importe quoi, je le verrai et je ne répondrai pas.

                                                            Par contre, il y a les rigolos qui mettent des vrais mails ou qui y ressemblent.

                                                            Pour ça, on ne peut rien faire, malheureusement. Toutes les REGEX et les algorithmes du monde n'y pourront rien.

                                                            Un con restera un con. C'est con, mais contre les cons, que faire ? (ça fait beaucoup de con dans une phrase ^^ )

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              13 novembre 2015 à 19:25:46

                                                              Dernière remarque, car on a presque fait le tour (et encore c'est pas sûr)...
                                                              Et si un internaute qui ne se cache pas derrière un email bidon commettait néanmoins une faute d'orthographe dans son adresse ?.... (ce n'est pas un cas d'école, ça arrive tous les jours et j'en sais quelquechose)
                                                              Tu vas faire de la prose pour rien, Mr Jourdain !... Non ?....

                                                              -
                                                              Edité par Anonyme 13 novembre 2015 à 19:31:19

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Amélioration de REGEX vérification adresse mail.

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown