5107 votes

Valider l'adresse e-mail dans le JavaScript?

Comment une adresse e-mail est validé en JavaScript?

5965voto

sectrean Points 8640

À l'aide d'expressions régulières est probablement la meilleure façon. Voici un exemple (démo):

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
} 

Mais gardez à l'esprit que l'on ne doit pas s'appuyer uniquement sur la validation JavaScript. JavaScript peut être facilement désactivé. Ce doit être validée sur le côté serveur en tant que bien.

1104voto

Squirtle Points 1169

J'ai légèrement modifié Jaymon de réponse pour les gens qui veulent vraiment simple de validation sous la forme de:

anystring@anystring.anystring

L'expression régulière:

/\S+@\S+\.\S+/

Exemple de fonction JavaScript:

function validateEmail(email) 
{
    var re = /\S+@\S+\.\S+/;
    return re.test(email);
}

853voto

voyager Points 17283

Juste pour être complet, ici vous avez un autre RFC 2822 conforme regex

La norme officielle est connu comme la RFC 2822. Il décrit la syntaxe des adresses email valides doivent adhérer. Vous pouvez (mais vous ne devriez pasde lire sur) mettre en œuvre avec cette expression régulière:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

(...) Nous obtenons une mise en œuvre plus pratique de la RFC 2822 si nous omettons la syntaxe à l'aide de guillemets et entre crochets. Il sera toujours correspondre à 99,99% de toutes les adresses e-mail dans l'utilisation réelle d'aujourd'hui.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

Un autre changement, vous pourriez faire est de permettre à tout code pays à deux lettres de domaine de premier niveau, et seuls certains domaines génériques de premier niveau. Cette regex filtres mannequin adresses e-mail comme asdf@adsf.adsf. Vous devez le mettre à jour que de nouveaux domaines de premier niveau sont ajoutés.

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

Donc, même en suivant les normes officielles, il y a encore des arbitrages réalisés. Ne pas copier aveuglément les expressions régulières de bibliothèques en ligne ou des forums de discussion. Toujours tester sur vos propres données et avec vos propres applications.

C'est moi qui souligne

456voto

Jaymon Points 1258

Wow, il y a beaucoup de complexité. Si tout ce que vous voulez faire est d'attraper le plus évident des erreurs de syntaxe, je voudrais faire quelque chose comme ceci:

\S+@\S+

Il attrape habituellement la plupart des erreurs évidentes que fait l'utilisateur et s'assure que le formulaire est surtout à droite, qui est ce que la validation JavaScript est tout au sujet.

352voto

Paolo Bergantino Points 199336

Il y a quelque chose que vous avez à comprendre le second vous décidez d'utiliser une expression régulière pour valider des e-mails: Il est probablement pas une bonne idée. Une fois que vous avez fini avec cela, il existe de nombreuses implémentations là-bas qui peut vous obtenir à mi-chemin, cet article résume les joliment.

En bref, toutefois, la seule façon d'être absolument sûr que l'utilisateur a entré en fait un e-mail est à envoyer un e-mail et de voir ce qui se passe. Autre que cela, c'est tous simplement des suppositions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X