Regex pour valider e-mails, URL et numéros de téléphone
Les regex de validation sont plus copiées que tout autre type de motif, et beaucoup sont subtilement fausses. Voici des motifs qui fonctionnent dans de vrais formulaires, ce que fait chaque partie, et les cas où une expression régulière n’est pas le bon outil.
Valider de façon souple, vérifier pour de bon
Une regex peut indiquer qu’une saisie ressemble à une adresse e-mail ; seul l’envoi d’un message prouve qu’elle existe. Les motifs trop stricts rejettent de vrais utilisateurs — signes plus, domaines longs, noms internationaux — tout en laissant passer les fautes de frappe. Visez des motifs qui repèrent les erreurs évidentes, puis vérifiez.
Adresses e-mail
Un motif pragmatique qui couvre presque toutes les adresses réelles :
^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Une partie locale, un @, un domaine avec un point, et aucun espace. Il accepte ada+news@example.co.uk et rejette ada@example et ada @example.com. Une version un peu plus stricte pour la partie locale :
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Celle-ci rejette les adresses internationalisées (comme josé@example.com) ; privilégiez donc la première si vos utilisateurs sont dans le monde entier. En HTML, <input type="email"> effectue déjà une validation selon la règle propre au navigateur. Pour vérifier qu’un domaine peut réellement recevoir des e-mails, consultez son enregistrement MX avec le Email DNS Checker.
URL
N’écrivez pas de regex pour les URL : analysez-les. Tous les environnements modernes disposent d’un analyseur d’URL qui connaît les règles :
function isHttpUrl(value) {
try {
const u = new URL(value);
return u.protocol === 'http:' || u.protocol === 'https:';
} catch {
return false;
}
}
La vérification du protocole est essentielle : new URL('javascript:alert(1)') s’analyse sans erreur, et cette chaîne ne doit jamais se retrouver dans un href. Si vous avez besoin d’une regex pour repérer des URL dans un texte, utilisez un motif simple et analysez ensuite chaque correspondance :
https?:\/\/[^\s<>"']+
Décomposez une URL en protocole, hôte, chemin et paramètres de requête avec le URL Parser.
Numéros de téléphone
Les formats varient selon les pays : la regex la plus sûre se contente donc de nettoyer la saisie. Supprimez tout sauf les chiffres et un signe plus en début de chaîne, puis vérifiez la longueur selon la norme E.164 (15 chiffres au maximum) :
const clean = input.replace(/(?!^\+)[^\d]/g, '');
const ok = /^\+?[1-9]\d{6,14}$/.test(clean);
Pour une validation réelle par pays — indicatifs régionaux, mobile ou fixe — utilisez une bibliothèque comme libphonenumber. Voici un motif réservé à l’Amérique du Nord, si c’est le seul format que vous acceptez :
^\(?([2-9]\d{2})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})$
Tester avant la mise en production
Collez un motif dans le Regex Tester avec une liste d’exemples valides et invalides, un par ligne, et activez l’indicateur multiligne pour que ^ et $ correspondent à chaque ligne. Si un motif hérité est illisible, le Regex Explainer le décompose élément par élément. Méfiez-vous du backtracking catastrophique : les quantificateurs imbriqués comme (a+)+ peuvent bloquer un serveur avec une saisie malveillante.