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 disposez de 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 (function (email) {
    if (! filter.test (email.value)) {
    alert (? Veuillez fournir une adresse e-mail valide?);
    email.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 électroniques 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 vous assurer adresse e-mail est valide conformément à la RFC.

      Il y a plusieurs raisons pour ne pas autoriser quelqu'un à saisir une adresse e-mail non valide:
      1. Ils seront ennuyés contre vous lorsque l'e-mail auquel ils s'attendaient ne parviendra pas - que ce soit votre faute ou non, l'adresse a été mal saisie.
      2. Si com.museum était un domaine valide et, disons, Yahoo! l'a exploité - toute adresse e-mail qui rebondirait 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 services de messagerie vous a autorisé à entrer bob@com.museum, vous paieriez également pour chaque e-mail envoyé à cette adresse e-mail jusqu'à ce qu'ils se désabonnent de cette adresse en raison de rebonds. Je voudrais éviter 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 un moyen 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 de majuscules.
    - Je n'en connais aucun TLD avec des nombres dedans.
    Sur une note latérale, 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 avoir des numéros, je sais).

  6. 11

    Salut,

    J'essaie de l'utiliser sous une forme existante en temps réel, mais cela ne semble pas valider en temps réel comme votre vérificateur de force de mot de passe ...

    Ou est-ce que je suis 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 en favori celui-ci….

  8. 13
  9. 16
  10. 17

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

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

    Avec le premier, des TLD de toute longueur seraient acceptés (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 les choses comme vous l'avez fait dans le code ci-dessus?

  12. 19

    Ceci est un code court pour l'expression d'e-mail-

    function validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._- </font>+@[a-zA-Z0-9.- </font>+.[a-zA-Z—2,4{XNUMX}$/;
    return emailPattern.test (id);

    }
    Deepak Rai
    varanasi

  13. 20

    Ceci est un code court pour l'expression d'e-mail-

    function validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._- </font>+@[a-zA-Z0-9.- </font>+.[a-zA-Z—2,4{XNUMX}$/;
    return emailPattern.test (id);

    }
    Deepak Rai
    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é le courrier électronique:

    test @ test

    et il a passé le 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 conviendrait 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).
    Aussi il accepterait john…doe@gmail.com ce qui est également invalide car il ne peut pas y avoir plus d'un point dans une séquence.

    Ce ne sont que quelques défauts que j'ai remarqués au premier abord.
    Mon intention n'est pas de dénigrer simplement cela au cas où quelqu'un envisage de l'utiliser comme un 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

    Deepak,

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

    function validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._- </font>+@[a-zA-Z0-9.- </font>+.[a-zA-Z—2,4{XNUMX}$/;
    return emailPattern.test (id);

    }

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

    Salutations,

    Federico

  20. 29

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valeur du champ avec les espaces supprimés
    var emailFilter = /^[^@ Often+@[^@..
    varlegalChars = / [(),;: \ ”[]] /;

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

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

    error = "Veuillez saisir une adresse e-mail valide.n";
    } else if (fld.value.match (legalChars)) {

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

  21. 30

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valeur du champ avec les espaces supprimés
    var emailFilter = /^[^@ Often+@[^@..
    varlegalChars = / [(),;: \ ”[]] /;

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

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

    error = "Veuillez saisir une adresse e-mail valide.n";
    } else if (fld.value.match (legalChars)) {

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

  22. 31

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valeur du champ avec les espaces supprimés
    var emailFilter = /^[^@ Often+@[^@..
    varlegalChars = / [(),;: \ ”[]] /;

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

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

    error = "Veuillez saisir une adresse e-mail valide.n";
    } else if (fld.value.match (legalChars)) {

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

  23. 32

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valeur du champ avec les espaces supprimés
    var emailFilter = /^[^@ Often+@[^@..
    varlegalChars = / [(),;: \ ”[]] /;

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

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

    error = "Veuillez saisir une adresse e-mail valide.n";
    } else if (fld.value.match (legalChars)) {

    error = "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..