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="emailaddress". Si teniu la biblioteca prototype.js (http://www.prototypejs.org) inclòs a la pàgina podeu fer alguna cosa com això:

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

  2. 5
  3. 7

    M'agrada la idea, però dubtaria a adoptar aquesta expressió regular en 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 fa una feina 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 senzills i emetre un avís per a tota la resta en lloc de rebutjar-lo. Si en Bob realment 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 utilitzant un Provador de regex en línia.

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

      Hi ha alguns motius per no permetre que algú introdueixi una adreça de correu electrònic no vàlida:
      1. Es molestaran amb tu quan el correu electrònic que esperaven no arribi, independentment de si va ser culpa teva o no que l'adreça s'hagi introduït incorrectament.
      2. Si com.museum fos un domini vàlid i, diguem-ne, Yahoo! el va fer funcionar: qualsevol adreça de correu electrònic que rebotés tindria un impacte negatiu en la reputació de la vostra empresa pel que fa al lliurament de correu electrònic. Això podria provocar que es bloquegessin tots els correus electrònics de la vostra empresa.
      3. Si el vostre proveïdor de serveis de correu electrònic us ha permès entrar bob@com.museum, també pagareu per cada correu electrònic enviat a aquesta adreça electrònica fins que no cancel·lin la subscripció a aquesta adreça a causa dels rebots. M'allunyaria de qualsevol ESP que permeti 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 a dins.
    Com a nota al marge, permeto TLD amb fins a 6 caràcters; de nous arriben amb regularitat i mai se sap (bé, els futurs fins i tot poden tenir números, ho sé).

  6. 11

    Hi there,

    Estic provant d'utilitzar-ho en un formulari existent en temps real, però sembla que això no s'està validant en temps real com el vostre verificador de seguretat de contrasenya...

    O sóc tan despistat i no em funciona?

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

    Només una petita correcció: l'expressió regular té un ()+ addicional al final. S'ha 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 intrínsecament incorrecta com han assenyalat altres, però si aquesta fos la intenció, l'expressió es podria escurçar).

  11. 18

    Pots explicar l'expressió regular d'aquest codi i com funciona? També sobre .test: .test és una declaració predeterminada en javascript per comprovar coses com vau fer al codi anterior?

  12. 19

    Aquest és un codi curt per a l'expressió de correu electrònic:

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

    }
    Deepak Rai
    varanasi

  13. 20

    Aquest és un codi curt per a l'expressió de correu electrònic:

    funció validateEmail (id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    retornar 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 expresions regulars, però he provat el correu electrònic:

    prova@prova

    i va passar l'expressió regular... Em vaig adonar que faltava escapar del "." doncs 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 és 100% precisa, per exemple, això estaria bé amb 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 darrer caràcter a la part local del correu electrònic).
    També acceptaria john...doe@gmail.com que tampoc no és vàlid 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 atacar només assenyalar-ho en cas que algú tingui previst fer-ho servir 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,

    De fet, crec que heu d'aplicar una escapada per al punt ("."). Per tant, la vostra funció hauria de ser, en canvi:

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

    }

    En cas contrari, el punt significaria "qualsevol caràcter". Crec que aquests personatges especials s'han d'escapar.

    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 == "Introdueix la teva adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (!emailFilter.test(tfld)) { //correu electrònic de prova per a 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 == "Introdueix la teva adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (!emailFilter.test(tfld)) { //correu electrònic de prova per a 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 == "Introdueix la teva adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (!emailFilter.test(tfld)) { //correu electrònic de prova per a 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 == "Introdueix la teva adreça de correu electrònic") {

    error = "Introduïu la vostra adreça de correu electrònic.n";
    } else if (!emailFilter.test(tfld)) { //correu electrònic de prova per a 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.