Partage
  • Partager sur Facebook
  • Partager sur Twitter

REGEX n° de téléphone

Sujet résolu
    7 septembre 2012 à 11:49:57

    Salut !

    Je viens de lire le tutoriel sur le Site du Zéro concernant les REGEX, et je suis tombé sur la partie concernant les numéros de téléphone. Voici la REGEX en question:

    #^0[1-8]([-. ]?[0-9]{2}){4}$#


    Malheureusement, elle ne me convient pas tout à fait puisque je souhaiterai éviter ce genre de numéro: 0153.78 99-99 (dans lequel on mélange espace, tiret et point).

    Seulement, je ne sais pas comment faire pour forcer l'utilisation, soit du point, soit du tiret, soit de l'espace pour les 4 nombres afin que le numéro soit homogène.

    Une idée ?
    • Partager sur Facebook
    • Partager sur Twitter
      7 septembre 2012 à 11:54:42

      #^0[1-9](([0-9]{2}[.]){4}|([0-9]{2}[-]{4})|([0-9]{2}[ ]{4}))$#
      
      • Partager sur Facebook
      • Partager sur Twitter
        7 septembre 2012 à 12:13:12

        Effectivement, je n'y avais pas pensé !

        Merci beaucoup ! :)
        • Partager sur Facebook
        • Partager sur Twitter
          13 mars 2018 à 7:41:03

          J'avais la même question à propos du chapitre consacré aux expressions régulières. À mon avis ça vaut le coup de corriger le cours. Il y a moyen de le faire?

          ----------------------

          D'ailleurs je me suis rendu compte que dans ce REGEX les signes ".", " " et "-" 'aparraissent pas au bon endroit. Je vais regarder si je peux corriger ça, quand j'en aurai le temps.

          -
          Edité par KoenvanDuin 13 mars 2018 à 8:53:52

          • Partager sur Facebook
          • Partager sur Twitter
            13 mars 2018 à 10:55:51

            De mon côté j'utilise ça:

            $tel = "0139741331"; // 1
            $tel2 = "+33139741331"; // 1
            $tel3 = "01.39.74.13.31"; // 1
            $tel4 = "01-39-74-13-31"; // 1
            $tel5 = "0139d845z3s2q8"; // 0
            $tel6 = "abcdefgh"; // 0
            $tel7 = "132aa2d6549da8d4qs3d2daa"; // 0
            $tel8 = "+33@@zdi56482"; // 0
            $tel9 = "0132alx785zz9"; // 0
            $tel10 = "+33 01 39 74 13 31"; // 1
            $tel11 = "+33 dd 39 az 13 31"; // 0
            $reg = "@^[^a-z\@_!#\$%\^&\*<>;:\,]*\d+$@im";

            -
            Edité par xoxotf 13 mars 2018 à 11:21:58

            • Partager sur Facebook
            • Partager sur Twitter
              13 mars 2018 à 18:06:57

              @xoxotf,

              Je ne sais pas pourquoi mais ton code (sans les "$" et les "; // 1") ne se comporte pas comme attendu: aucun numéro ne semble correspondre à la REGEX. D'ailleurs, j'ai aussi essayé de corriger la REGEX que pioupiou_79 a donné, sans y réussir malheureusement.

              Tu pourrais m'expliquer en quoi consiste la tienne ? J'y vois beaucoup de syntaxe que je n'ai pas vue dans le chapitre consacré aux REGEX. 

              -
              Edité par KoenvanDuin 13 mars 2018 à 20:45:44

              • Partager sur Facebook
              • Partager sur Twitter
                13 mars 2018 à 21:42:58

                Je ne pense pas que tu trouveras beaucoup d'infos sur la syntaxe PCRE sur ce site malheureusement, Google te sera bien plus utile :)

                Concernant les "// 1", c'est juste pour distinguer les strings qui ont matché avec mon pattern et ceux qui ne sont pas passé.

                Pour ce qui est du "$", celui à la fin du pattern veut dire que la string doit obligatoirement finir par les caractères que j'ai sélectionnés entre autres "\d+" qui veut dire un chiffre ou plus. Quant à celui qui se trouve au milieu il fait partie d'une négation, un groupe entre crochets de caractères que je ne souhaite pas retrouver dans la string, à ne pas oublier le chapeau en début de crochet (et non celui en tout début du pattern) qui veut bien dire qu'on ne veut pas ces caractères-là.

                -
                Edité par xoxotf 13 mars 2018 à 21:43:30

                • Partager sur Facebook
                • Partager sur Twitter
                  15 mars 2018 à 8:22:35

                  • Merci d'essayer de m'aider, mais je n'y vois toujours pas très clair.

                    Comment tu “expliques” à Python que la chaîne doit contenir dix chiffres ? Je ne vois pas non plus comment python “sait” comment gérer des numéros interrompus par des tirets, des espaces ou des points. Et j'ai d'autres questions sur la syntaxe. J'en ai fait un petit fichier avec Paint que tu peux trouver dans la pièce jointe.

                    Tu peux m'éclaircir un peu ? Si tu n'as pas envie de me répondre, tu pourrais me recommander un site sur lequel je peux me renseigner, peut-être. Je crois avoir besoin d'un cours sur les REGEX pour comprendre ce que tu essaies de me dire.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 mars 2018 à 9:57:37

                    Je vais faire de mon mieux:

                    1 - Nous sommes sur le forum PHP, donc $reg c'est la syntaxe pour déclarer la variable reg.

                    2 - Le caractère "@" en début et fin de pattern signale le début et la fin de la regex, on peut utiliser  (quasiment) n'importe quel caractère pas forcément "@", comme tu la notais en bleu c'est leur seule fonction ici.

                    3- L'astérisque après le crochet est un quantifier, ça veut plus ou moins dire qu'ont le veut au minimal zéro résultat de ce qui précède et au maximum une infinité.

                    4- \d signifie que l'on veut un chiffre décimal.

                    5- le "+" après \d signifie que l'on souhaite avoir une ou plusieurs occurrences de \d, c'est aussi un quantifier.

                    6- "^" en tout début après "@" et "$" enfin signale que l'on veut que la chaîne commence par le caractère qui suit, et qui précède pour la fin.

                    7- "i" et "m" sont des flags ou drapeaux, entre autres des options qui seront prises en compte lors de la lecture de la chaîne. "i" veut dire que le string est insensible à la casse et "m" signifie qu'on utilise les symboles "^" et "$" pour indiquer respectivement le début et la fin de chaîne.

                    -
                    Edité par xoxotf 15 mars 2018 à 9:58:48

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 mars 2018 à 14:55:41

                      Une fois de plus, merci de m'aider.

                      Nous sommes sur le forum PHP

                      Oh-là-là tu fais bien de le dire, c'est dans le cours consacré à Python que j'ai trouvé cette histoire avec les REGEX. Je croyais être sur le forum de Python.

                      J'ai encore une petite question / remarque :

                      tu n'as rien fait pour écarter des numéros du genre “0213”, ”0-----”, ou “099999999999999999999” n'est ce pas ? Ces chaînes-là correspondent tous à ta REGEX si je ne m'abuse.

                      -
                      Edité par KoenvanDuin 16 mars 2018 à 14:56:04

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mars 2018 à 12:41:37

                        L'avantage de cette regex c'est que du coup ça comprend les numéros à l'international pas que français, donc à la rigueur tu peux compter le nombre de caractères pour imposer une limite. Pour ce qui est des tirets effectivement ça passe mais si tu limites le nombre de caractère de ton string il n'y a aucun intérêt à en abuser et ne provoquera pas une quelconque faille. Après bien sur tout dépend le contexte mais ce n'est pas une regex à destination d'un gros projet ça c'est sûr.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        REGEX n° de téléphone

                        × 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