===== 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é