Table des matières

D5-A01 : Les expressions régulières

Ressources sur le wiki :

S'entraîner :

Objectifs de l'activité

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.

  1. fichier Formulaire.php : Créer un formulaire HTML avec un champ de type “email” et un bouton “Valider”
    1. Quels sont les cas qui passent mais ne devraient pas ?
  2. 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:

  1. 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";
}
  1. quelle validation est faite ? Décomposer la règle. Tester avec un fichier Phase2a.php
  2. fichier Phase2b.php : écrire avec une RegEx la même validation que dans la phase1

Question:

  1. Comparez la taille et la lisibilité avec la solution de la phase 1.
  2. Testez plusieurs cas limites (test@.com, user@site, u@d.fr, etc.).
  3. 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 :

  1. 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,}$/”
  2. 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.
  3. Remplacement automatique
    • À partir d’un texte, remplacez tous les mots grossiers par ***.

Conclusion de la séance

Support activité