Partage
  • Partager sur Facebook
  • Partager sur Twitter

Expression Régulière ( Partie 2)

Sujet résolu
    19 septembre 2021 à 17:36:21

    Bonjour ,

    J'ai à la fois une question et besoin de savoir si mon raisonnement est bon car je ne suis pas sur de réellement comprendre le fonctionnement de cette expression régulière :

    <p>
    <?php
    if (isset($_POST['telephone']))
    {
        $_POST['telephone'] = htmlspecialchars($_POST['telephone']); // On rend inoffensives les balises HTML que le visiteur a pu entrer
    
        if (preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#", $_POST['telephone']))
        {
            echo 'Le ' . $_POST['telephone'] . ' est un numéro <strong>valide</strong> !';
        }
        else
        {
            echo 'Le ' . $_POST['telephone'] . ' n\'est pas valide, recommencez !';
        }
    }
    ?>
    </p>
    
    <form method="post">
    <p>
        <label for="telephone">Votre téléphone ?</label> <input id="telephone" name="telephone" /><br />
        <input type="submit" value="Vérifier le numéro" />
    </p>
    </form>

    J'ai suivi la méthodologie du prof pour l'écriture de la regex puis je me suis dis que j'allais comprendre par moi-même cette dernière et je ne sais pas si je me suis perdu donc voilà ce que je crois avoir compris de la regex :

    Le début doit commencer par un chiffre 0. 

    Le chiffre qui le suit doit être 1,6 ou 8.

    Un tiret, un point ou un espace est autorisé mais pas obligatoire grâce au point d'interrogation

    Les chiffres d'après sont par 2 qui se répètent ? (Je ne suis pas sur).

    Et ce sur quoi je bloque le pus c'est les accolades avec le chiffre 4 et même avec les explications du professeur j'ai pas compris puis je me suis mis à regardé un numéro de téléphone et là je me suis dis que le 4 correspond peut-être aux espaces blancs qui séparent les chiffres par 2.

    Est ce que quelqu'un pourrait m'éclairer ? J'ai vraiment besoin de bien comprendre les fondements de ce chapitre pour le prochain TP.

    PS: J'ai compris le fait que les accolades servent à répéter un caractère ou un ensemble de caractères.

    • Partager sur Facebook
    • Partager sur Twitter
      19 septembre 2021 à 17:46:41

      [0-9]{2} = 2 chiffes (ils peuvent être différents)

      ([-. ]?[0-9]{2}){4} : c'est ce qui est groupé par la parenthèse, comme en mathématiques, qui est répété 4 fois vu que l'on trouve une ) juste avant {4} donc il faut remonter jusqu'à la ( qui correspond à cette ) pour identifier ce qui est répété. Ce sont 4 fois un éventuel séparateur et 2 chiffres soit les 8 derniers chiffres d'un numéro de téléphone, les 2 premiers ayant été géré avant (0[1-68]). (...){4} permet d'éviter de répéter inutilement 4 fois [-. ]?[0-9]{2} parce que tu aurais pu l'écrire : ^0[1-68][-. ]?[0-9]{2}[-. ]?[0-9]{2}[-. ]?[0-9]{2}[-. ]?[0-9]{2}$, ce qui est bien moins "élégant".

      PS :

      • [0-9] s'abrège \d
      • la capture n'étant pas utilisée, autant utiliser des parenthèses non capturantes (remplacer ( par (?:)
      • on n'applique pas htmlspecialchars avant preg_match. C'est au niveau des/sur les echo que l'on devrait le trouver.

      -
      Edité par julp 19 septembre 2021 à 17:59:23

      • Partager sur Facebook
      • Partager sur Twitter
        19 septembre 2021 à 18:07:41

        Merci beaucoup pour les explications.

        J'étais tellement focalisé sur les accolades que j'en ai oublié les parenthèses et leur signification.

        En effet c'est moins élégant vu comme ça. 

        Pour ce qui est de la classe abrégée merci c'est expliqué juste avant l'écriture de cette regex.

        Quant à la capture je n'ai pas encore bien appréhendé cette partie mais je garde en tête ce que tu m'as dit.

        Maintenant c'est plus clair.

        Je clos le sujet !

        • Partager sur Facebook
        • Partager sur Twitter
          19 septembre 2021 à 18:39:56

          Yokke a écrit:

          [...]

          Maintenant c'est plus clair.

          Je clos le sujet !

          Bonjour,

          Sujet résolu

          Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

          • Partager sur Facebook
          • Partager sur Twitter
            19 septembre 2021 à 19:02:34

            AbcAbc6 a écrit:

            Yokke a écrit:

            [...]

            Maintenant c'est plus clair.

            Je clos le sujet !

            Bonjour,

            Sujet résolu

            Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)


            C'est fait pour le pouce !
            • Partager sur Facebook
            • Partager sur Twitter

            Expression Régulière ( Partie 2)

            × 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