Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ===== 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 <bootnote question> - Quelle est la lisibilité du code ? </bootnote> ==== 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**): <code> if (preg_match("/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i", $email)) { echo "Email valide"; } else { echo "Email invalide"; } </code> - 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 <bootnote 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, …) </bootnote> <bootnote learn>Savoir décortiquer une expression régulière.</bootnote> ==== 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é d5/a01.txt Dernière modification : 2025/09/12 09:15de dthevenot