« # »

Validar correo electrónico en JavaScript y PHP

Para validar campos de un formulario son muy útiles las expresiones regulares. A continuación os facilito una función para validar los correos electrónicos de los formularios de vuestras páginas.

  1. function valida_correo(email){
  2.     regx = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
  3.     return regx.test(email);
  4. }
  5. alert(valida_correo("nombre@dominio.com"));

Valida correos como:

  • nombre@dominio.com.es
  • nombre@dominio.org
  • nombre.apellido@dominio.com
  • nombre.apellido@dominio.com.es
  • nombre@dom-in-inio.com

Retorna error con mensajes como:

  • nombre.dominio.com
  • nombre@@dominio.com
  • e-mail@+falso.que.la.una
  • nombre@-dominio-.com
  • nombre@*****.com

En PHP sería lo mismo pero modificando un poco la función

  1. function valida_correo($email){
  2.     $regx = "^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$";
  3.     return ereg($regx,$email);
  4. }
  5. if(valida_correo("nombre@dominio.com")){
  6. echo "CORREO VALIDO";
  7. }else{
  8. echo "CORREO NO VALIDO";
  9. }

Actualización: Corregida la llamada a ereg, ya que había los argumentos invertidos, ahora está bien :P. (Gracias Oscar)

Comentarios

  1. luis méndez | septiembre 7th, 2006 | 6:07 pm

    Oye disculpa como puedo validar un correo electronico, es decir, que dicho correo realmente exista, no me refiero a la redación.
    GRACIAS

  2. marc | septiembre 7th, 2006 | 6:11 pm

    Luis, el problema que hay es que no es facil validar eso, ya que se tendría que mandar un correo al servidor y validar que la respuesta del mismo sea OK. Con javascript es, digamos… ejem… me cuesta decirlo pero… imposible validar eso, ya que no hay opción de conectar con el servidor para preguntar si una cuenta existe o no.

    La opción más rapida sería la de enviar un correo para que validen una URL (lo típico de los registros de los foros).

    saludos!
    Marc

  3. luisa villarreal | octubre 31st, 2006 | 3:03 am

    como puedo extraer datos de cualquier parte c,mis documentos.etc

  4. marc | octubre 31st, 2006 | 10:17 am

    Eso que preguntas Luisa está solo disponible para Internet Explorer. Puedes ver un magnifico tutorial en:

    http://www.webreference.com/js/column71/

    saludos!

  5. luisa villarreal | noviembre 2nd, 2006 | 3:47 am

    GRACIAS!!

  6. Gonzalo Moreno | noviembre 21st, 2006 | 10:26 pm

    Hola perdonad pero el script en php a mi no me funciona y parece correcto que puede estarme fallando, me da siempre “correo no valido”

    Muchas gracias

  7. Natan | enero 24th, 2007 | 1:24 am

    Hola!

    Yo no se casi nada de PHP, pero la función para checar el correo no me funciona a mi tampoco. Está tal y como la pusiste, pero siempre devuleve false. Espero puedas decirme si algo ando hacinedo mal. La puse tal y como está aquí, sin modificaciones.

    Gracias.

  8. Oscar | febrero 16th, 2007 | 4:48 pm

    La función ereg() de PHP tiene la siguiente sintaxis:

    int ereg ( string pattern, string string [, array regs] )

    Por favor verifiquen si funciona de la siguiente manera:

    function valida_correo($email){
    $regx = “^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$”;

    return ereg($regx,$email);
    }
    if(valida_correo(“nombre@dominio.com”)){
    echo “CORREO VALIDO”;
    }else{
    echo “CORREO NO VALIDO”;
    }

  9. viviana | febrero 20th, 2007 | 11:31 pm

    hola!

    hey necesito saber como activar un correo electronico para msn,este correo es @marihuana.cl, porfa ayuda!!

    gracias!!

  10. Tonatiu Camarillo | marzo 14th, 2007 | 4:41 am

    No funciona ninguna de las dos opciones… de todos modos se agradece la intención espero poder resolver el problema y enviare la respuesta si la encuentro saludos.

  11. Tonatiu Camarillo | marzo 14th, 2007 | 6:04 am

    Al moderador… le pido que corrija para que quede de una forma mas comprensible aun que es el mismo script

    function is_email($email)
    {
    //validação com expressões regulares
    if (ereg(“^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$”,$email) )
    echo “correo valido”;
    else
    echo “correo no valido”;
    }

  12. richard | abril 13th, 2007 | 8:21 pm

    bueno me parece interesante el codigo pero.. lo aplique y no me salio… me puedes mandar el codigo pero el JavaScript lo intente hacer pero no me sale :S:S

  13. ARMANDO | abril 17th, 2007 | 12:24 am

    Hola, tal vez estoy loco y lo que quiero hacer no existe o no se puede, peeeero aqui les va:
    Determinada pagina web me envia periodicamente un correo dentro del cual existen 7 compos que me interesa extraer de forma automatica y asignar de la misma forma a un formulario y por ultimo se envie el formulario por correo ya con esos 7 campos ya asignados.

    Espero que me den una mano.
    Gracias.

  14. jesus | mayo 30th, 2007 | 7:48 pm

    gracias

  15. naxo | agosto 28th, 2007 | 5:59 am

    necesito validar un email en c

  16. naxo | agosto 28th, 2007 | 6:00 am

    AY ALGUIEN Q M PUEDA ECHAR UNA MANO NECESITO VALIDAR UN EMAIL EN C

  17. Carmen Cerda | septiembre 12th, 2007 | 7:28 pm

    Como seria la validación de varios mail separados por punto y coma en un mismo campo
    por favor es urgente
    Gracias

  18. Bueno | octubre 8th, 2007 | 8:52 pm

    Bueno yo no te puedo ayudar pero gracias por preguntar

  19. novato | noviembre 6th, 2008 | 10:02 pm

    ¿Por qué no admite direcciones de correo electrónico que solo tengan un carácter entre la arroba y el punto? (he estado haciendo pruebas y no las admite)

    La expresión ([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.), ¿no dice que puede haber 0 o más elementos como lo de antes del * seguido de un número o una letra y un punto? ¿Y por qué falla si son 0 (0 de los de antes del * y 1 de entre el * y el ., 1 carácter en total entre la @ y el .)

    Gracias!

  20. marc | noviembre 8th, 2008 | 12:19 am

    NOVATO, al estar agrupando en 3 corchetes, lo que haces es pedir una de estas: [0-9a-zA-Z], luego pides N letras (no números, ya que \w es a-zA-Z y excluye 0-9) con el [\-\w] y finalmente pides una letra como la inicial antes del punto. Con lo que tenemos que pides {char}{char}\. mínimo.

    Lo ideal en este caso sería un validador de nombres de dominio, el cual analice sencillamente lo que hay detrás de la @, pero tambien se tienen que tener en cuenta los correos en subdominios (ejemplo@de.correo.en.subdominio.com).

    saludos!

  21. novato | noviembre 8th, 2008 | 9:22 pm

    Muchas gracias, Marc!!!

Deja un comentario

(*: Datos necesarios para dejar un comentario)

Get Adobe Flash player