Passer au contenu principal
eLearner.app
Module 8 · Leçon 1 sur 429/32 dans le cours~12 min
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.

Code
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

Exercice#regex.m8.l1.e1
Tentatives : 0Chargement…

Reconnaissez chaque e-mail dans le texte. Utilisez un motif simple : lettres/chiffres/points avant l'arobase @, domaine avec au moins un point.

Chargement de l'éditeur…
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

Exercice#regex.m8.l1.e2
Tentatives : 0Chargement…

Capturez le domaine (la partie après l'arobase @) de chaque e-mail sous forme de groupe nommé `dominio`.

Chargement de l'éditeur…
Afficher l'indice

Enveloppez la partie domaine dans un groupe nommé : (?<dominio>[\w.-]+).

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#regex.m8.l1.e3
Tentatives : 0Chargement…

Trouvez la partie domaine d'un e-mail (tout ce qui suit `@`), en excluant le signe `@` à l'aide du lookbehind.

Chargement de l'éditeur…
Afficher l'indice

Utilisez un lookbehind positif (?<=@) devant la classe de caractères du domaine.

Solution disponible après 3 tentatives