Comproveu l'adreça de correu electrònic amb JavaScript i expressions regulars

Fa un temps vaig posar un Comprovador de força de contrasenya mitjançant JavaScript i expressions regulars. En aquesta mateixa nota, també podeu comprovar l'estructura d'una adreça de correu electrònic mitjançant la mateixa metodologia d'expressió regular (expressió regular).

Si el vostre element de formulari té el fitxer id = "adreça electrònica" i afegiu un formulari onSubmit = ”return checkEmail ();Aquesta és una funció Javascript que podeu utilitzar per tornar una alerta si l'adreça de correu electrònic té una estructura vàlida o no:

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 funció valida el contingut del correu electrònic amb el del filtre. Si la comparació falla, apareix una alerta i torna el focus al camp de l'adreça de correu electrònic.

41 Comentaris

  1. 1

    Per als formularis amb diverses adreces de correu electrònic, seria bo fer class = "adreça de correu electrònic". Si teniu la biblioteca prototype.js (http://www.prototypejs.org) inclòs a la pàgina podeu fer alguna cosa així:

    var vàlid = cert;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. adreça electrònica'). cadascun (funció (correu electrònic) {
    if (! filter.test (email.value)) {
    alerta (? Proporcioneu una adreça de correu electrònic vàlida?);
    email.focus;
    vàlid = fals;
    }
    });
    retorn vàlid;

  2. 5
  3. 7

    M'agrada la idea, però dubtaria en adoptar aquesta expressió regular particular sense descriure quines adreces de correu electrònic legals no accepta i quines adreces il·legals permet.

    Per obtenir un exemple d'una expressió regular que faci un treball decent juntament amb una explicació de quins casos no cobreix, vegeu això:

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

    La meva preferència personal és cobrir la majoria dels casos simples i emetre una advertència per a tota la resta en lloc de rebutjar-la. Si realment Bob vol presentar-se bob@com.museum més aviat que bob@museum.com, per què no deixar-lo?

    • 8

      Hola Reg,

      Podeu provar el Regex mitjançant un Provador de Regex en línia.

      A més, definitivament hi ha molt més que es pot fer si es vol assegurar un adreça de correu electrònic és vàlid d'acord amb la RFC.

      Hi ha alguns motius per no permetre que algú introdueixi una adreça de correu electrònic no vàlida:
      1. Es molestaran quan el missatge de correu electrònic que esperaven no arribi, independentment de si va ser culpa o no de l'adreça incorrecta.
      2. Si com.museum era un domini vàlid i, diguem-ne, Yahoo! el va operar: qualsevol adreça de correu electrònic que rebotés tindria un impacte negatiu sobre la reputació de la vostra empresa de lliurament de correus electrònics. Això podria provocar el bloqueig de tots els correus electrònics de la vostra empresa.
      3. Si el vostre proveïdor de serveis de correu electrònic us va permetre entrar bob@com.museum, també pagareu per cada correu electrònic enviat a aquesta adreça de correu electrònic fins que cancel·lessin la subscripció a causa de rebots. M'allunyaria de qualsevol ESP que permetés una adreça de correu electrònic no vàlida com aquesta: només us prenen els diners.

      Gràcies per parar!
      Doug

  4. 9
  5. 10

    Hi ha una manera molt més senzilla d’escriure l’expressió:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Amb el modificador final / i no cal indicar l'interval de majúscules.
    - No en conec cap TLD amb números.
    En una nota lateral, permeto TLD amb fins a 6 caràcters; n’hi ha de nous que arriben regularment i mai se sap (bé, hi ha alguns que fins i tot poden incloure nombres, ho sé).

  6. 11

    Hi there,

    Estic provant d'utilitzar-ho en un formulari existent en temps real, però no sembla que estigui validant-se en temps real, com el comprovador de força de contrasenya ...

    O, sóc tan despistat i no funciona per a mi?

  7. 12
  8. 13
  9. 16
  10. 17

    Només una petita correcció: l'expressió regular té un extra () + al final. S'hauria de llegir:

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

    Amb el primer s’acceptarien qualsevol TLD de longitud (cosa que no és intrinsecament incorrecte com han assenyalat altres, però si aquesta fos la intenció es podria escurçar l’expressió).

  11. 18

    Podeu explicar l’expressió regular d’aquest codi i com funciona? També sobre .test: és .test una declaració per defecte a javascript per comprovar coses com heu fet al codi anterior?

  12. 19
  13. 20

    Aquest és un codi breu per expressar el correu electrònic

    funció validateEmail (identificador)
    {
    var emailPattern = /^[a-zA-Z0-9._-] ++[[a-zA-Z0-9.-]
    tornar emailPattern.test (id);

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Gràcies, però hi ha un error en aquesta expressió regular. No sóc un expert en l'expressió regular, però he provat el correu electrònic:

    prova @ prova

    i va passar la regla regular ... Vaig notar que falta escapar del "." per tant, hauria de ser:

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

  17. 24
  18. 27

    Bé, això és només una comprovació aproximada, però no precisa al 100%, per exemple, estaria bé john_doe. @ gmail.com que en realitat no és una adreça de correu electrònic vàlida (no es permet el punt com a últim caràcter a la part local del correu electrònic).
    També acceptaria john…doe@gmail.com cosa que també no és vàlida ja que no pot haver-hi més d'un punt en una seqüència.

    Aquests són només alguns defectes que vaig notar a primera vista.
    La meva intenció no és basar-me només per assenyalar-ho en cas que algú tingui previst utilitzar-lo com a control de seguretat, no prou segur.

    Per obtenir informació sobre adreces de correu electrònic vàlides, consulteu això: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    En realitat, crec que heu d'aplicar una fuita per al punt ("."). Per tant, la vostra funció hauria de ser:

    funció validateEmail (identificador)
    {
    var emailPattern = /^[a-zA-Z0-9._-] ++[[a-zA-Z0-9.-]
    tornar emailPattern.test (id);

    }

    En cas contrari, el punt significaria "qualsevol personatge". Crec que cal escapar de personatges tan especials.

    Salutacions,

    Federico

  20. 29

    funció validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del camp amb espais en blanc retallats
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduïu la vostra adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (! emailFilter.test (tfld)) {// prova el correu electrònic de caràcters il·legals

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    }
    error de retorn;
    }

  21. 30

    funció validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del camp amb espais en blanc retallats
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduïu la vostra adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (! emailFilter.test (tfld)) {// prova el correu electrònic de caràcters il·legals

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    }
    error de retorn;
    }

  22. 31

    funció validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del camp amb espais en blanc retallats
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduïu la vostra adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (! emailFilter.test (tfld)) {// prova el correu electrònic de caràcters il·legals

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    }
    error de retorn;
    }

  23. 32

    funció validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del camp amb espais en blanc retallats
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduïu la vostra adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (! emailFilter.test (tfld)) {// prova el correu electrònic de caràcters il·legals

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduïu una adreça de correu electrònic vàlida.n";
    }
    error de retorn;
    }

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

Què et sembla?

Aquest lloc utilitza Akismet per reduir el correu no desitjat. Esbrineu com es processa el vostre comentari.