===== D5-A01 : Les expressions régulières =====
Ressources sur le wiki :
- https://sio.lyc-lecastel.fr/doku.php?id=slam:aide_preg_match&do=
- https://sio.lyc-lecastel.fr/doku.php?id=promo_2026:bloc1_web:c12#verification_avanceeintroduction_aux_expressions_regulieres
S'entraîner :
- https://zestedesavoir.com/tutoriels/3651/les-expressions-regulieres-1/
- https://extendsclass.com/fr/regex-tester.html#js
==== 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
- 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
- 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, …)
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é