Verifique la dirección de correo electrónico con JavaScript y expresiones regulares

Hace un rato puse un Comprobador de seguridad de contraseña mediante JavaScript y expresiones regulares. En esa misma nota, también puede verificar la estructura de una dirección de correo electrónico utilizando la misma metodología de expresión regular (regex).

Si su elemento de formulario tiene el id = "dirección de correo electrónico" y agregas un formulario onSubmit = ”return checkEmail ();“, Esta es una función de Javascript que puede utilizar para devolver una alerta si la dirección de correo electrónico tiene 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ón valida el contenido del correo electrónico al del filtro. Si la comparación falla, aparece una alerta y devuelve el foco al campo de la dirección de correo electrónico.

41 Comentarios

  1. 1

    Para formularios con varias direcciones de correo electrónico, sería bueno hacer class = ”emailaddress”. Si tiene la biblioteca prototype.js (http://www.prototypejs.org) incluido en la página, puede hacer algo como esto:

    var válido = verdadero;
    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)) {
    alerta (? Proporcione una dirección de correo electrónico válida?);
    email.focus;
    válido = falso;
    }
    });
    retorno válido;

  2. 5
  3. 7

    Me gusta la idea, pero dudaría en adoptar esta expresión regular en particular sin una descripción de qué direcciones de correo electrónico legales no acepta y qué direcciones ilegales permite.

    Para ver un ejemplo de una expresión regular que hace un trabajo decente junto con una explicación de qué casos no cubre, vea esto:

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

    Mi preferencia personal es cubrir la mayoría de los casos simples y emitir una advertencia para todo lo demás en lugar de rechazarlo. Si Bob realmente quiere enviar bob@com.museum más bien que bob@museum.com, ¿por qué no lo dejas?

    • 8

      Hola Reg,

      Puede probar el Regex utilizando un Probador de expresiones regulares en línea.

      Además, definitivamente se puede hacer mucho más si desea garantizar una dirección de correo electrónico es válido de acuerdo con el RFC.

      Hay algunas razones para no permitir que alguien ingrese una dirección de correo electrónico no válida:
      1. Se enfadarán contigo cuando el correo electrónico que esperaban no llegue, independientemente de si fue tu culpa o no que la dirección se ingresara incorrectamente.
      2. Si com.museum fuera un dominio válido y, digamos, Yahoo! lo operaba: cualquier dirección de correo electrónico que rebotara tendría un impacto negativo en la reputación de su empresa para la entrega de correo electrónico. Esto podría provocar que se bloqueen todos los correos electrónicos de su empresa.
      3. Si su proveedor de servicios de correo electrónico le permitió ingresar bob@com.museum, también pagaría por cada correo electrónico enviado a esa dirección de correo electrónico hasta que cancelen la suscripción a esa dirección debido a rebotes. Me mantendría alejado de cualquier ESP que permitiera una dirección de correo electrónico no válida como esa, ¡solo están tomando su dinero!

      ¡Gracias por pasar!
      Doug

  4. 9
  5. 10

    Hay una forma mucho más sencilla de escribir la expresión:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    - Con el modificador final / i no es necesario indicar el rango de mayúsculas.
    - no conozco ninguno Dominios de primer nivel con números en él.
    En una nota al margen, permito TLD con hasta 6 caracteres; llegan nuevos con regularidad y nunca se sabe (bueno, algunos futuros pueden incluso tener números, lo sé).

  6. 11

    Hola,

    Estoy tratando de usar esto en un formulario existente en tiempo real, pero esto no parece estar validando en tiempo real como el verificador de seguridad de su contraseña ...

    O, ¿soy así de despistado y no me funciona?

  7. 12

    Por cierto, me gusta mucho lo que tienes aquí, tus tutoriales son muy simples, definitivamente lo marcaré como favorito….

  8. 13
  9. 16
  10. 17

    Solo una pequeña corrección: la expresión regular tiene un extra () + al final. Debería leer:

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

    Con el primero, se aceptarían TLD de cualquier longitud (lo que no es intrínsecamente incorrecto como han señalado otros, pero si esa era la intención, la expresión podría acortarse).

  11. 18

    ¿Puede explicar la expresión regular de este código y cómo funciona? También sobre .test: ¿es .test una declaración predeterminada en javascript para verificar cosas como lo hizo en el código anterior?

  12. 19

    Este es un código corto para la 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}$/;
    return emailPattern.test (id);

    }
    Deepak Rai
    Varanasi

  13. 20

    Este es un código corto para la 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}$/;
    return emailPattern.test (id);

    }
    Deepak Rai
    Varanasi

  14. 21
  15. 22
  16. 23

    Gracias, pero hay un error en esta expresión regular. No soy un experto en expresiones regulares, pero probé el correo electrónico:

    prueba prueba

    y pasó la expresión regular ... Me di cuenta de que le falta escapar del "." entonces debería ser:

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

  17. 24
  18. 27

    Bueno, esto es solo una verificación aproximada pero no 100% precisa, por ejemplo, esto estaría bien con john_doe. @ gmail.com que en realidad no es una dirección de correo electrónico válida (no se permite el punto como último carácter en la parte local del correo electrónico).
    También aceptaría john…doe@gmail.com que también es inválido ya que no puede haber más de un punto en una secuencia.

    Estos son solo algunos defectos que noté a primera vista.
    Mi intención no es atacar solo para señalar esto en caso de que alguien planee usar esto como un control de seguridad, no lo suficientemente seguro.

    Para obtener información sobre direcciones de correo electrónico válidas, consulte esto: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    Deepak,

    De hecho, creo que debe aplicar un escape para el punto ("."). Entonces, su función debería ser, en cambio:

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

    }

    De lo contrario, el punto significaría "cualquier carácter". Creo que hay que escapar de esos personajes especiales.

    Saludos,

    Federico

  20. 29

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del campo con los espacios en blanco recortados
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var ilegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Ingrese su dirección de correo electrónico") {

    error = "Introduzca su dirección de correo electrónico. n";
    } else if (! emailFilter.test (tfld)) {// prueba el correo electrónico en busca de caracteres ilegales

    error = "Introduzca una dirección de correo electrónico válida. n";
    } else if (fld.value.match (IlegalChars)) {

    error = "Introduzca una dirección de correo electrónico válida. n";
    }
    retorno de error;
    }

  21. 30

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del campo con los espacios en blanco recortados
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var ilegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Ingrese su dirección de correo electrónico") {

    error = "Introduzca su dirección de correo electrónico. n";
    } else if (! emailFilter.test (tfld)) {// prueba el correo electrónico en busca de caracteres ilegales

    error = "Introduzca una dirección de correo electrónico válida. n";
    } else if (fld.value.match (IlegalChars)) {

    error = "Introduzca una dirección de correo electrónico válida. n";
    }
    retorno de error;
    }

  22. 31

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del campo con los espacios en blanco recortados
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var ilegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Ingrese su dirección de correo electrónico") {

    error = "Introduzca su dirección de correo electrónico. n";
    } else if (! emailFilter.test (tfld)) {// prueba el correo electrónico en busca de caracteres ilegales

    error = "Introduzca una dirección de correo electrónico válida. n";
    } else if (fld.value.match (IlegalChars)) {

    error = "Introduzca una dirección de correo electrónico válida. n";
    }
    retorno de error;
    }

  23. 32

    function validateEmail (fld) {
    var error = ””;
    var tfld = trim (fld.value); // valor del campo con los espacios en blanco recortados
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var ilegalChars = / [(),;: \ ”[]] /;

    if (fld.value == "Ingrese su dirección de correo electrónico") {

    error = "Introduzca su dirección de correo electrónico. n";
    } else if (! emailFilter.test (tfld)) {// prueba el correo electrónico en busca de caracteres ilegales

    error = "Introduzca una dirección de correo electrónico válida. n";
    } else if (fld.value.match (IlegalChars)) {

    error = "Introduzca una dirección de correo electrónico válida. n";
    }
    retorno de error;
    }

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

¿Qué piensas?

Este sitio usa Akismet para reducir el correo no deseado. Descubra cómo se procesan los datos de sus comentarios.