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.
[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.
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 !
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.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli