D5-A01 : Les expressions régulières
Ressources sur le wiki :
S'entraîner :
Objectifs de l'activité
- Comprendre l’intérêt des expressions régulières dans le traitement de chaînes de caractères.
- Savoir comparer une approche “classique” (boucles, conditions, fonctions de base) avec une approche utilisant des regex.
- Renforcer l’analyse de code et la capacité à améliorer un programme existant.
- Prendre l’habitude de tester et valider ses résultats avec des cas concrets.
Durée : 4 heures maximum
Phase 1 – Manipulation simple de chaînes (sans RegEx)
On vous demande de vérifier si une chaîne saisie par un utilisateur est bien une adresse e-mail valide.
- fichier Formulaire.php : Créer un formulaire HTML avec un champ de type “email” et un bouton “Valider”
- Quels sont les cas qui passent mais ne devraient pas ?
- fichier Phase1.php : Reprendre le formulaire et compléter la validation du champ email en utilisant uniquement des fonctions PHP de base (strpos, substr, strlen, …), sans RegEx, vérifiez que l’email contient :
- un point . après le @ (le domaine doit contenir un point)
- au moins 3 caractères avant le @
- au moins 2 caractères après le dernier point
- au moins 2 caractère avant le dernier point
Question:
- Quelle est la lisibilité du code ?
Phase 2 – Utilisation d'une RegEx
Avec une RegEx, on peut écrire une règle compacte qui englobe toutes les conditions.
On utilise preg_match() qui retourne 1 si la chaîne correspond au motif.
Réécrivez le contrôle d’email en utilisant preg_match et une expression régulière.
Exemple de départ (RegEx1):
if (preg_match("/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i", $email)) { echo "Email valide"; } else { echo "Email invalide"; }
- quelle validation est faite ? Décomposer la règle. Tester avec un fichier Phase2a.php
- fichier Phase2b.php : écrire avec une RegEx la même validation que dans la phase1
Question:
- Comparez la taille et la lisibilité avec la solution de la phase 1.
- Testez plusieurs cas limites (test@.com, user@site, u@d.fr, etc.).
- Quels sont les cas particuliers encore non couverts (accent, majuscules, domaines spécifiques, …)
A Savoir: Savoir décortiquer une expression régulière.
Phase 3 – Approfondissement et généralisation
Proposez trois scripts indépendants :
- Validation d’un mot de passe
- Au moins 8 caractères
- Au moins une majuscule, une minuscule et un chiffre
- Regex suggérée : “/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/”
- Extraction d’informations d’un texte
- À partir d’un texte contenant des numéros de téléphone français (ex: 01 23 45 67 89, 06-12-34-56-78), utilisez une regex pour extraire tous les numéros.
- Remplacement automatique
- À partir d’un texte, remplacez tous les mots grossiers par ***.
Conclusion de la séance
Support activité