Motifs1 chasse jouable incluse

Regex d'e-mail : des motifs prêts à copier qui marchent vraiment

Trois regex d'e-mail prêtes à copier (simple, pratique et stricte), quand utiliser chacune, et les erreurs courantes qui rejettent de vraies adresses.

Logo de Regex Hunter

· 6 min de lecture · Mis à jour le

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

à attraper

  • ana@site.com
  • x+t@site.io
  • jo@mail.co.uk

à épargner

  • ana@example
  • @site.com
  • a@@b.io

01Regex d'e-mail prêtes à copier

Motif À utiliser quand
^\S+@\S+$ Simple. Une vérification rapide, par exemple pour filtrer des logs ou dans un champ de recherche.
^[^\s@]+@[^\s@]+\.[^\s@]+$ Pratique (notre choix). Formulaires d'inscription et de contact : toutes les vraies adresses passent, pas les fautes de frappe courantes.
^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$ Stricte. Vous devez accepter exactement ce qu'accepte le champ type="email" d'un navigateur.

Essayez-les sur vos propres adresses dans le bac à sable, ou entraînez-vous avec le pack Validateurs de formats. La suite de l'article explique pourquoi le motif pratique est le bon choix par défaut.

Cherchez « regex e-mail » et vous trouverez des motifs de toutes les tailles, de dix caractères à plusieurs milliers. Certains ont tenté de faire tenir toute la norme des adresses e-mail dans une seule expression régulière, et le résultat est réputé illisible.

La bonne nouvelle : vous n'avez besoin de rien de tout cela. Voici le motif que nous recommandons, pourquoi les motifs plus stricts causent plus de problèmes qu'ils n'en évitent, et ce qu'il faut faire à la place. Tous les exemples sont interactifs : modifiez les motifs et observez ce qui change.

02Pourquoi la regex d'e-mail « parfaite » n'existe pas

Le format des adresses e-mail autorise bien plus de choses qu'on ne l'imagine. Toutes celles-ci sont valides :

  • x+newsletter@site.io (une étiquette après un plus, pour filtrer le courrier)
  • j.doe@mail.co.uk (un sous-domaine et une terminaison de pays en deux parties)
  • ana@studio.photography (un domaine de premier niveau long)
  • josé@exemplo.com.br (des lettres non anglaises, acceptées par les serveurs de messagerie qui gèrent les adresses internationales)

Et un motif ne peut pas vous dire si une adresse existe. ana@example.com a une forme parfaite et peut pourtant revenir en erreur. La seule vraie vérification consiste à envoyer un message et à demander à la personne de cliquer sur un lien.

Le rôle d'une regex est donc plus modeste qu'il n'y paraît : repérer les fautes de frappe évidentes avant d'envoyer ce message.

03Le motif que nous recommandons

Correspondances9/9 comme prévu
/^[^\s@]+@[^\s@]+\.[^\s@]+$/

Doit correspondre5/5

  • ana@example.com
  • j.doe@mail.co.uk
  • x+tag@site.io
  • ana@studio.photography
  • josé@exemplo.com.br

Ne doit pas4/4

  • ana@example
  • ana@@example.com
  • ana @example.com
  • @example.com
Essayez-le dans le bac à sable
Quelque chose sans espace ni @, puis un seul @, puis un domaine contenant au moins un point. Toutes les adresses réelles passent, et pas les fautes de frappe courantes.

Lisez-le en quatre parties :

  1. ^[^\s@]+ un ou plusieurs caractères qui ne sont ni un espace ni un @
  2. @ exactement une arobase
  3. [^\s@]+\. un nom de domaine, puis un point littéral
  4. [^\s@]+$ le reste du domaine, jusqu'à la fin

Il est court, lisible, et ne rejette personne qui possède une vraie adresse.

04Erreur n° 1 : oublier les ancres

Sans ^ ni $, une regex n'a besoin de trouver un morceau en forme d'e-mail que quelque part dans le texte :

Correspondances2/2 comme prévu
/\S+@\S+/
  • ana@example.com
  • not an email: a@b c
Essayez-le dans le bac à sable
La dernière ligne passe parce que « a@b » y figure. Avec ^ et $, c'est toute la saisie qui doit être l'adresse.

05Erreur n° 2 : être trop strict

Les motifs d'e-mail les plus répandus en ligne ressemblent à celui-ci. Il a l'air soigné, et il laisse de vraies personnes à la porte :

Correspondances4/4 comme prévu
/^[\w.]+@\w+\.[a-z]{2,4}$/

Doit correspondre1/1

  • ana@example.com

Ne doit pas3/3

  • j.doe@mail.co.uk
  • x+tag@site.io
  • ana@studio.photography
Essayez-le dans le bac à sable
Chaque ligne ici est une adresse valide, et ce motif n'accepte que la première.

Il échoue de trois façons à la fois :

  • \w+ avant le point n'autorise qu'une seule partie de domaine : mail.co.uk échoue.
  • [\w.] ne contient pas de + : les adresses avec une étiquette après un plus échouent.
  • [a-z]{2,4} suppose que les domaines de premier niveau sont courts. Des centaines sont plus longs : .photography, .software, .museum.

Même une version plus soignée, ^[\w.+-]+@[\w-]+(\.[\w-]+)+$, rejette encore josé@exemplo.com.br, car \w ne couvre que les lettres anglaises dans la plupart des moteurs. Une vraie adresse rejetée, c'est une inscription perdue. Une faute de frappe qui passe sera de toute façon repérée par l'e-mail de confirmation.

06Ce qu'utilisent les navigateurs

Le <input type="email"> du HTML vérifie les adresses avec son propre motif, publié dans la norme HTML :

Motif133 car.
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
Essayez-le dans le bac à sable
Le motif de la norme HTML. Il autorise user@localhost (pas besoin de point) et rejette les lettres non anglaises avant le @.

Si vous utilisez type="email" dans un formulaire, le navigateur fait déjà cette vérification pour vous. C'est généralement suffisant côté front-end.

07Une version golf de regex

La validation et le golf n'ont pas le même but. Un validateur doit être sûr quelle que soit la saisie. Un plateau de golf n'a qu'à séparer ces mots-là : vous pouvez donc viser la plus petite différence.

Chaque monstre ci-dessous a une lettre juste avant le @ et un point quelque part après. Chaque innocent enfreint l'une de ces règles :

Chasse jouablepar 8

Attrapez les chaînes qui ressemblent à un e-mail, épargnez celles qui sont mal formées.

Cibles · 0/4 attrapées

  • ana@site.comcible
  • bo@mail.iocible
  • x.y@z.orgcible
  • k@q.devcible

Innocents · erreurs : 0

  • ana@siteinnocent
  • @mail.ioinnocent
  • bo@@z.orginnocent
  • site.cominnocent
  • a.b@cinnocent

Tapez une regex — le plateau se met à jour en direct.

Essayez-le dans le bac à sable
Ça vous plaît ? Une nouvelle chasse chaque jour.Jouer la chasse du jour

08Récapitulatif

  • Utilisez ^[^\s@]+@[^\s@]+\.[^\s@]+$ ou le type="email" du navigateur.
  • Ancrez toujours avec ^ et $ quand vous validez une saisie entière.
  • Ne limitez pas les domaines de premier niveau à 2 à 4 lettres.
  • Ne rejetez ni le +, ni les points supplémentaires dans le domaine, ni les lettres non anglaises.
  • Envoyez un e-mail de confirmation. C'est le seul test qui prouve que l'adresse fonctionne.

09Continuez à vous entraîner