Leçons du module (1/4)
Valider un e-mail
Valider un e-mail "correctement" est un problème bien plus difficile qu'il n'y paraît : la RFC 5322 est un monstre. En pratique, nous choisissons un motif suffisamment bon qui accepte les cas courants et rejette ceux qui sont manifestement erronés.
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$[\w.+-]+-- partie locale : lettres, chiffres,_,.,+,-.@-- séparateur.[\w-]+(?:\.[\w-]+)+-- domaine + au moins un TLD séparé par..
Ce qu'il accepte : mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.
Ce qu'il rejette : mario@, @example.com, mario@example (pas de TLD), espaces.
Compromis
Le motif ci-dessus n'accepte pas :
- Les chaînes entre guillemets
"strange (things)"@example.com(la RFC les autorise). - Les domaines avec des caractères Unicode (
\u00fcber@m\u00fcnchen.de). - Les TLD très longs qui ne passent pas
\w(ex. ceux internationalisés).
Si vous en avez besoin, élargissez la classe à \p{L} avec le drapeau u, ou déléguez à une bibliothèque spécialisée.
Compromis et bonnes pratiques pour la validation des e-mails
Aucune regex ne peut garantir qu'une adresse e-mail existe réellement. Des motifs excessivement complexes dégradent les performances et excluent des domaines inhabituels mais valides. Il est préférable d'utiliser un motif de validation simple pour rejeter les fautes de frappe évidentes et d'envoyer un code de vérification.
À vous de jouer
Reconnaissez chaque e-mail dans le texte. Utilisez un motif simple : lettres/chiffres/points avant l'arobase @, domaine avec au moins un point.
Afficher l'indice
Élargissez la partie locale à [\w.+-]+ et le domaine à [\w-]+\.[\w.-]+ pour accepter plusieurs TLD.
Solution disponible après 3 tentatives
Exercice de révision
Capturez le domaine (la partie après l'arobase @) de chaque e-mail sous forme de groupe nommé `dominio`.
Afficher l'indice
Enveloppez la partie domaine dans un groupe nommé : (?<dominio>[\w.-]+).
Solution disponible après 3 tentatives
Défi supplémentaire
Trouvez la partie domaine d'un e-mail (tout ce qui suit `@`), en excluant le signe `@` à l'aide du lookbehind.
Afficher l'indice
Utilisez un lookbehind positif (?<=@) devant la classe de caractères du domaine.
Solution disponible après 3 tentatives