Vérifier l'adresse e-mail avec JavaScript et les expressions régulières

Il y a quelque temps, j'ai mis en place un Vérificateur de force de mot de passe à l'aide de JavaScript et d'expressions régulières. Sur cette même note, vous pouvez également vérifier la structure d'une adresse e-mail en utilisant la même méthodologie d'expression régulière (regex).

Si votre élément de formulaire a le id = "emailaddress" et vous ajoutez un formulaire onSubmit = ”return checkEmail ();«, C'est une fonction Javascript que vous pouvez utiliser pour renvoyer une alerte si l'adresse e-mail a une structure valide ou non:

function checkEmail() {
var email = document.getElementById('emailaddress');
var filter = /^(([^<>()[\]\\.,;:\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,}))$/;
if (!filter.test(email.value)) {
alert('Please provide a valid email address');
email.focus;
return false;
}
}

La fonction valide le contenu de l'email à celui du filtre. Si la comparaison échoue, une alerte apparaît et renvoie le focus dans le champ d'adresse e-mail!

41 Commentaires

  1. 1

    Pour les formulaires avec plusieurs adresses e-mail, il serait bon de faire class="emailaddress". Si vous avez la bibliothèque prototype.js (http://www.prototypejs.org) inclus sur la page, vous pouvez faire quelque chose comme ceci :

    var valide = vrai ;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$('.emailaddress').each( fonction(email) {
    si (!filter.test(email.value)) {
    alert(?Veuillez fournir une adresse e-mail valide?);
    e-mail.focus ;
    valide = faux ;
    }
    });
    retour valide ;

  2. 5
  3. 7

    J'aime l'idée, mais j'hésiterais à adopter cette expression régulière particulière sans description des adresses e-mail légales qu'elle n'accepte pas et des adresses illégales qu'elle autorise.

    Pour un exemple d'expression régulière qui fait un travail décent avec une explication des cas qu'elle ne couvre pas, voir ceci :

    http://www.regular-expressions.info/email.html

    Ma préférence personnelle est de couvrir la plupart des cas simples et d'émettre un avertissement pour tout le reste plutôt que de le rejeter. Si Bob veut vraiment soumettre bob@com.museum plutôt que bob@museum.com, pourquoi ne pas le laisser ?

    • 8

      Salut Reg,

      Vous pouvez tester le Regex en utilisant un Testeur de regex en ligne.

      De plus, il y a certainement beaucoup plus à faire si vous voulez assurer un adresse e-mail est valide conformément à la RFC.

      Il existe plusieurs raisons de ne pas autoriser quelqu'un à saisir une adresse e-mail invalide :
      1. Ils s'énerveront contre vous si l'e-mail qu'ils attendaient ne parvient pas, que ce soit ou non de votre faute si l'adresse n'a pas été saisie correctement.
      2. Si com.museum était un domaine valide et, disons, Yahoo! l'exploitait – toute adresse e-mail rejetée aurait un impact négatif sur la réputation de votre entreprise en matière de livraison d'e-mails. Cela pourrait entraîner le blocage de tous les e-mails de votre entreprise.
      3. Si votre fournisseur de service de messagerie vous a autorisé à entrer bob@com.museum, vous payez également pour chaque e-mail envoyé à cette adresse e-mail jusqu'à ce qu'il se désabonne de cette adresse en raison de rebonds. J'éviterais tout ESP qui autoriserait une adresse e-mail invalide comme celle-là - ils ne font que prendre votre argent !

      Merci de votre visite!
      Doug

  4. 9
  5. 10

    Il existe une manière beaucoup plus simple d'écrire l'expression:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    – Avec le modificateur final /i, il n'est pas nécessaire d'indiquer la plage des majuscules.
    - je n'en connais pas TLD avec des chiffres dedans.
    En passant, j'autorise TLD avec jusqu'à 6 caractères; de nouveaux arrivent régulièrement et on ne sait jamais (enfin, certains futurs peuvent même contenir des chiffres, je sais).

  6. 11

    Salut,

    J'essaie de l'utiliser dans un formulaire existant en temps réel, mais cela ne semble pas se valider en temps réel comme votre vérificateur de force de mot de passe…

    Ou, suis-je juste si ignorant, et ça ne marche pas pour moi ?

  7. 12

    btw, j'aime vraiment ce que vous avez ici, vos tutoriels sont très simples, je vais certainement mettre celui-ci en signet….

  8. 13
  9. 16
  10. 17

    Juste une petite correction : L'expression régulière a un supplément ()+ à la fin. Il devrait lire:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    Avec le premier, n'importe quelle longueur de TLD serait acceptée (ce qui n'est pas intrinsèquement faux comme d'autres l'ont souligné, mais si telle était l'intention, l'expression pourrait être raccourcie).

  11. 18

    Pouvez-vous s'il vous plaît expliquer l'expression régulière de ce code et comment cela fonctionne? Aussi à propos de .test – Est-ce que .test est une instruction par défaut en javascript pour vérifier des choses comme vous l'avez fait dans le code ci-dessus ?

  12. 19

    Il s'agit d'un code court pour l'expression d'e-mail-

    fonction validerEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/ ;
    retourner emailPattern.test(id);

    }
    Deepak Raï
    varanasi

  13. 20

    Il s'agit d'un code court pour l'expression d'e-mail-

    fonction validerEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/ ;
    retourner emailPattern.test(id);

    }
    Deepak Raï
    varanasi

  14. 21
  15. 22
  16. 23

    Merci, mais il y a une erreur dans cette regex. Je ne suis pas un expert en regex, mais j'ai essayé email:

    test@test

    et il a passé la regex… J'ai remarqué qu'il manquait d'échapper au "." donc ça devrait être :

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  17. 24
  18. 27

    Eh bien, ce n'est qu'une vérification approximative mais pas précise à 100 %, par exemple, cela irait bien avec john_doe.@gmail.com qui n'est en fait pas une adresse e-mail valide (le point n'est pas autorisé comme dernier caractère dans la partie locale de l'e-mail).
    Il accepterait aussi john…doe@gmail.com qui est également invalide car il ne peut y avoir plus d'un point dans une séquence.

    Ce ne sont là que quelques défauts que j'ai remarqués au premier regard.
    Mon intention n'est pas de critiquer simplement pour le signaler au cas où quelqu'un envisageait de l'utiliser comme contrôle de sécurité - pas assez sécurisé.

    Pour plus d'informations sur les adresses e-mail valides, consultez ceci : http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepack,

    En fait, je pense que vous devez appliquer un échappement pour le point ("."). Donc, votre fonction devrait être, à la place :

    fonction validerEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/ ;
    retourner emailPattern.test(id);

    }

    Sinon, le point signifierait "n'importe quel caractère". Je crois que ces caractères spéciaux doivent être échappés.

    Salutations,

    Federico

  20. 29

    fonction validerEmail(fld) {
    var erreur=””;
    var tfld = trim(fld.value); // valeur du champ avec les espaces coupés
    var filtre_email = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Entrez votre adresse e-mail") {

    error = "Veuillez saisir votre adresse e-mail.n" ;
    } else if (!emailFilter.test(tfld)) { // teste l'e-mail pour les caractères illégaux

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    } sinon si (fld.value.match(illegalChars)) {

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    }
    erreur de retour ;
    }

  21. 30

    fonction validerEmail(fld) {
    var erreur=””;
    var tfld = trim(fld.value); // valeur du champ avec les espaces coupés
    var filtre_email = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Entrez votre adresse e-mail") {

    error = "Veuillez saisir votre adresse e-mail.n" ;
    } else if (!emailFilter.test(tfld)) { // teste l'e-mail pour les caractères illégaux

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    } sinon si (fld.value.match(illegalChars)) {

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    }
    erreur de retour ;
    }

  22. 31

    fonction validerEmail(fld) {
    var erreur=””;
    var tfld = trim(fld.value); // valeur du champ avec les espaces coupés
    var filtre_email = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Entrez votre adresse e-mail") {

    error = "Veuillez saisir votre adresse e-mail.n" ;
    } else if (!emailFilter.test(tfld)) { // teste l'e-mail pour les caractères illégaux

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    } sinon si (fld.value.match(illegalChars)) {

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    }
    erreur de retour ;
    }

  23. 32

    fonction validerEmail(fld) {
    var erreur=””;
    var tfld = trim(fld.value); // valeur du champ avec les espaces coupés
    var filtre_email = /^[^@]+@[^@.]+.[^@]*ww$/ ;
    var illegalChars= /[(),;:\”[]]/ ;

    if (fld.value == "Entrez votre adresse e-mail") {

    error = "Veuillez saisir votre adresse e-mail.n" ;
    } else if (!emailFilter.test(tfld)) { // teste l'e-mail pour les caractères illégaux

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    } sinon si (fld.value.match(illegalChars)) {

    erreur = "Veuillez saisir une adresse e-mail valide.n" ;
    }
    erreur de retour ;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

Que pensez-vous?

Ce site utilise Akismet pour réduire les spams. Découvrez comment sont traitées les données de vos commentaires..