Tutorial Javascript/PHP: Expresión Regular para Validar E-Mail

JavaScript
Validar E-Mail PHP y Javascript

Continuando el uso de Expresiones Regulares para validar formularios con PHP y Javascript (anteriormente escribí sobre cómo Validar URL con RegEx), en esta ocasión te comparto una expresión regular que comprueba que las direcciones de correo electrónico escritas en un formulario están en formato correcto, por ejemplo:

  • nombre@dominio.com es correcto y pasa la validación.
  • nombre@dominio dará error.

Esta expresión regular es compatible con PHP, javascript y expresiones regulares de PERL (PCRE).

La expresión regular que validará que una dirección de correo electrónico es correcta:

var er = /^[0-9a-z_\-\.]+@([a-z0-9\-]+\.?)*[a-z0-9]+\.[a-z]{2,10}$/i;

Y para validar que la dirección de correo pertenece a un dominio específico:
Nota: Cambiar dominio\.com por el dominio que quieres validar, para validar varios dominios, se deben encerrar entre paréntesis y separar cada uno con el caracter |

var er = /^[0-9a-z_\-\.]+@dominio\.com$/i;

Ejemplo de integración en javascript:

function ValidaMail(mail) {
var er = /^[0-9a-z_\-\.]+@([a-z0-9\-]+\.?)*[a-z0-9]+\.[a-z]{2,10}$/i;
return er.test(mail);
}
if(!ValidaMail(f.campo.value)) {
alert("La dirección de EMail es incorrecta !!");
}

Eso es todo, espero que la información sea de mucha utilidad, si tienes cualquier duda, corrección o comentario, usa el formulario de abajo para dejar tu valiosa opinión… será un gusto ayudar.

Saludos desde México, DaxMX 🙂

Nota: Artículo actualizado del original escrito en Diciembre de 2009 en dasumo.com

12 comentarios
  1. Celia

    Hola,

    En mi opinión, el codigo anterior no es del todo correcto, ya que, según el RFC que establece el formato de las direcciones de correo, el punto . en la parte local del correo (antes de la @), no debe ir nunca como primer ni como último caracter de dicha parte, es decir, nunca debe emplearse un punto como primer caracter de la dirección de correo ni tampoco debe ir nunca junto a la @. Esto debe controlarse también en la expresión regular.

    Saludos!

    • Hola Celia, tienes razón y eres muy observadora… Lo hice de ese modo para simplificar ya que admite correos en formato «válido» (excepto por lo que has comentado), además aunque jamás he visto direcciones de correo que inicien con un PUNTO, sí que existen (literalmente) aquellas con uno o más PUNTOS antes del @.

      Con ligeras modificaciones a la expresión regular, que tú misma puedes hacer, se consigue validar direcciones de correo de acuerdo a RFC.

      Un saludo y mil gracias por tu observación 🙂

  2. Jonathan Guisao S.

    Muchas gracias, estaba pegado en la validación de la dirección de correo.naaye8

  3. Ángel

    Muchas gracias por este código! Llevaba una mañana entera intentando que funcionara una validación de emial para un formulario y esto me ha servido. ¡Por fin coño!

    • paula

      igual nada que me daba esa validacion 😛 por fin dos tardes

  4. andre

    es interesante la explicación puesto que es de gran ayuda, pero quisiera saber como hacer para que el nombre de usuario no me permita ingresar dos puntos seguidos(..)?

    • Hola Andre:

      No te recomiendo hacerlo antes del @ pues existen direcciones de email con uno o más (.) seguidos, pero para la parte del dominio (lo que va después del @) quedaría así:

      /^[0-9a-z_\-\.]+@([a-z0-9\-]+\.?)*[a-z0-9]+\.[a-z]{2,10}$/i;

      Saludos (ya he actualizado la expresión regular en el post, gracias por el comentario).

  5. Rosa

    Hola Gracias

    Me funciono excelente pero porque al final va la i

    • Con el identificador i la expresión regular no distingue entre mayúsculas y minúsculas, osea, tomará como válidos los correos:

      HOLA@ALGO.COM y hola@algo.com

      Saludos.

  6. Roketa

    SER eres un verdadero haragán, ¿Acaso es tán difícil escribir una línea de código?, la expresión regular es sencilla, ocupa una línea, veo que eres el típico copy paste que nunca hace nada si no es copiando y pegando.

    A los autores del blog, gracias por la expresión regular para validar mail, me salvó el día.

  7. Ser

    Para que pones un codigo si no permites copiarlo… no inventes… si es aportacion… no comprendo esto… si esa es tu idea.. simplemente sin palabras

    • Hola…

      Desde hace tiempo (antes de este post), coloqué un script anticopia en mi sitio porque siempre robaban mis artículos y aparecían en otros blogs sin compartir el crédito, actualmente ya no necesito ese script porque mi blog está semi-abandonado, sin embargo, al momento de crear esté artículo pasé por alto dicho script y me olvidé de retirarlo, me disculpo por ello, en en transcurso de hoy me daré tiempo para retirarlo…

      Por otro lado, ¿No crees que era más fácil un AVISO o simple PREGUNTA en lugar de un RECLAMO?