Comprobe o enderezo de correo electrónico con JavaScript e expresións regulares

Hai un tempo coloquei un Comprobador de forza de contrasinal mediante JavaScript e expresións regulares. Nesa mesma nota, tamén pode comprobar a estrutura dun enderezo de correo electrónico empregando a mesma metodoloxía de expresión regular (rexex).

Se o seu elemento de formulario ten o id = "dirección de correo electrónico" e engades un formulario onSubmit = ”return checkEmail ();Esta é unha función Javascript que pode empregar para devolver unha alerta se o enderezo de correo electrónico ten unha estrutura válida 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;
}
}

A función valida o contido do correo electrónico co do filtro. Se falla a comparación, aparece unha alerta e devolve o foco ao campo do enderezo de correo electrónico.

41 Comentarios

  1. 1

    Para os formularios con varios enderezos de correo electrónico, sería bo facer class = "emailaddress". Se tes a biblioteca prototype.js (http://www.prototypejs.org) incluído na páxina podes facer algo así:

    var valid = verdadeiro;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$ ('. dirección de correo electrónico'). cada unha (función (correo electrónico) {
    if (! filter.test (email.value)) {
    alerta (? Por favor, proporcione un enderezo de correo electrónico válido?);
    correo electrónico.foco;
    válido = falso;
    }
    });
    devolución válida;

  2. 5
  3. 7

    Gústame a idea, pero dubidaría en adoptar esta expresión regular sen describir que enderezos de correo electrónico legais non acepta e que enderezos ilegais permite.

    Para un exemplo dunha expresión regular que fai un traballo decente xunto cunha explicación de que casos non abrangue, vexa isto:

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

    A miña preferencia persoal é cubrir a maioría dos casos simples e emitir un aviso para todo o demais en lugar de rexeitalo. Se Bob realmente quere presentarse bob@com.museum en vez de bob@museum.com, por que non deixalo?

    • 8

      Ola Reg,

      Podes probar o Regex usando un Probador de rexistro en liña.

      Ademais, definitivamente hai moito máis que se pode facer se queres asegurar un enderezo de correo electrónico é válido segundo a RFC.

      Hai algúns motivos para non permitir que alguén introduza un enderezo de correo electrónico non válido:
      1. Enfadaranse con vostede cando o correo electrónico que esperaban non chega a pasar - independentemente de se foi culpa ou non da dirección que se introduciu incorrectamente.
      2. Se com.museum era un dominio válido e, digamos, Yahoo! operouno: calquera enderezo de correo electrónico que rebote tería un impacto negativo na reputación da súa empresa para a entrega de correo electrónico. Isto pode provocar o bloqueo de todos os correos electrónicos da súa empresa.
      3. Se o seu fornecedor de servizos de correo electrónico lle permitiu entrar bob@com.museum, tamén pagaría por cada correo electrónico enviado a ese enderezo de correo electrónico ata que cancelasen ese enderezo debido a rebotes. Quitaríame de calquera ESP que permitise un enderezo de correo electrónico non válido coma ese, só están a levar o seu diñeiro.

      ¡Grazas por pasar por aquí!
      Doug

  4. 9
  5. 10

    Hai un xeito moito máis sinxelo de escribir a expresión:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Co modificador final / i non é necesario indicar o rango de maiúsculas.
    - Non sei de ningún TLD con números nel.
    Por outra banda, permito TLD con ata 6 caracteres; chegan novas con regularidade e nunca se sabe (ben, algúns futuros poden ter incluso números, seino).

  6. 11

    Ola alí,

    Estou intentando usar isto nun formulario existente en tempo real, pero isto non parece validarse en tempo real como o seu control de intensidade do contrasinal ...

    Ou son tan despistado e non me funciona?

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

    Só unha pequena corrección: a expresión regular ten un extra () + ao final. Debería dicir:

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

    Co primeiro aceptaríanse TLD de lonxitude (o que non é intrinsecamente incorrecto como sinalaron outros, pero se esa era a intención, a expresión podería acurtarse).

  11. 18

    Podes explicar a expresión regular deste código e como funciona? Tamén sobre .test. ¿É .test unha declaración predeterminada en javascript para comprobar cousas como fixeches no código anterior?

  12. 19

    Este é un código curto para a expresión de correo electrónico-

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

    }
    Deepak Rai
    varanasi

  13. 20

    Este é un código curto para a expresión de correo electrónico-

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

    }
    Deepak Rai
    varanasi

  14. 21
  15. 22
  16. 23

    Grazas, pero hai un erro nesta expresión regular. Non son un experto en regularidade, pero probei o correo electrónico:

    proba @ proba

    e pasou a expresión regular ... Notei que falta escapar do "." polo que debería ser:

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

  17. 24
  18. 27

    Ben, esta é só unha comprobación aproximada pero non precisa ao 100%, por exemplo, estaría ben john_doe. @ gmail.com que en realidade non é un enderezo de correo electrónico válido (o punto non está permitido como último carácter na parte local do correo electrónico).
    Tamén aceptaría john…doe@gmail.com o que tamén non é válido xa que non pode haber máis dun punto nunha secuencia.

    Estes son só algúns defectos que notei a primeira vista.
    A miña intención non é basearse só para sinalalo por se alguén ten pensado usalo como un control de seguridade, non o suficientemente seguro.

    Para obter información sobre enderezos de correo electrónico válidos consulte isto: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    En realidade, creo que cómpre aplicar un escape para o punto ("."). Entón, a súa función debería ser, no seu lugar:

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

    }

    Se non, o punto significaría "calquera personaxe". Creo que hai que escapar de personaxes tan especiais.

    Saúdos,

    Federico

  20. 29

    función validateEmail (fld) {
    var erro = ””;
    var tfld = recortar (valor fld.); // valor do campo co espazo en branco recortado
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduza o seu enderezo de correo electrónico") {

    error = "Introduza o seu enderezo de correo electrónico.n";
    } else if (! emailFilter.test (tfld)) {// proba o correo electrónico de caracteres ilegais

    error = "Introduza un enderezo de correo electrónico válido.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduza un enderezo de correo electrónico válido.n";
    }
    erro de devolución;
    }

  21. 30

    función validateEmail (fld) {
    var erro = ””;
    var tfld = recortar (valor fld.); // valor do campo co espazo en branco recortado
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduza o seu enderezo de correo electrónico") {

    error = "Introduza o seu enderezo de correo electrónico.n";
    } else if (! emailFilter.test (tfld)) {// proba o correo electrónico de caracteres ilegais

    error = "Introduza un enderezo de correo electrónico válido.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduza un enderezo de correo electrónico válido.n";
    }
    erro de devolución;
    }

  22. 31

    función validateEmail (fld) {
    var erro = ””;
    var tfld = recortar (valor fld.); // valor do campo co espazo en branco recortado
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduza o seu enderezo de correo electrónico") {

    error = "Introduza o seu enderezo de correo electrónico.n";
    } else if (! emailFilter.test (tfld)) {// proba o correo electrónico de caracteres ilegais

    error = "Introduza un enderezo de correo electrónico válido.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduza un enderezo de correo electrónico válido.n";
    }
    erro de devolución;
    }

  23. 32

    función validateEmail (fld) {
    var erro = ””;
    var tfld = recortar (valor fld.); // valor do campo co espazo en branco recortado
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var illegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Introduza o seu enderezo de correo electrónico") {

    error = "Introduza o seu enderezo de correo electrónico.n";
    } else if (! emailFilter.test (tfld)) {// proba o correo electrónico de caracteres ilegais

    error = "Introduza un enderezo de correo electrónico válido.n";
    } else if (fld.value.match (illegalChars)) {

    error = "Introduza un enderezo de correo electrónico válido.n";
    }
    erro de devolución;
    }

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

¿Que pensas?

Este sitio usa Akismet para reducir o spam. Aprende a procesar os teus datos de comentarios.