feed twitter facebook LinkedIn facebook

JavaScript » Validar el email con JavaScript

Enero 9, 2009 por Víctor Cuervo . 27465 visitas 40 Comentarios Imprimir Imprimir

Muchas aplicaciones pueden precisar de una validación de email, es decir, validar si lo que está introduciendo el usuario es realmente un email. Esta comprobación es susceptible de hacerse en la maquina cliente, evitando así cargar al servidor con la respectiva comprobación y la consiguiente llamada desde la página web.

Nosotros nos valdremos de JavaScript para validar si la cadena introducida por el usuario es un email. Y al trabajar con validaciones con cadenas nos valdremos de las expresiones regulares.

Toda la implementación del ejercicio estará en montar la expresión regular. Para ello debemos de tener en cuenta varias cosas.

En primer lugar La expresion regular delimita su inicio con /^ y su fin con $/. Por lo que una expresión regular tendría la forma:

/^ expr regular $/

El email se compone de tres partes:

nombre usuario + @ + servidor + dominio

Veamos que consideraciones debemos de tener con cada una de esas partes.

Nombre y servidor

  • Debe de empezar por letra o numero. Al menos tiene una letra o número. La letra o número se expresa mediante el carácter \w. Para asegurarnos de que la letra o número aparece al menos una vez utilizaremos el modificador +.
  • Puede contener puntos y guiones además de las letras y números. Esta combinación podrá aparecer, es por ello que utilizaremos el modificador * (cero o varias veces). Insertaremos toda la combinación entre paréntesis.

Su expresión regular, para ambos casos, será la siguiente:

\w+([\.-]?\w+)*

Dominio

  • Irá al final, detrás de un punto. Podrá tener dos (.es, .fr, .it,...) o tres letras (.com, .net, .org,..) o cuatro (.mobi, info,...). Si queremos indicar un número concreto de caracteres lo expresamos con el número entre los operadores { y }
  • Además podemos tener varios dominios seguidos (.com.ar, .com.uk,....) es por ello que deberemos de usar el modificador +. Ya que el dominio podrá aparecer varias veces.

Su expresión regular será comos sigue:

(\.\w{2,3,4})+

La expresión regular final para validar el email con JavaScript sería:

/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3,4})+$/

Para la implementación de validar el email con JavaScript vamos a crear un formulario, el cual llamará a la función validarEmail. Esta función será la que ejecute la expresión regular.

  1.  
  2. function validarEmail(email){...}
  3.  

La expresión regular la ejecutaremos mediante el método test del objeto RegExp. El objeto RegExp, como su nombre bien indica, representa las expresiones regulares.

  1.  
  2. function validarEmail(valor) {
  3. if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3,4})+$/.test(valor)){
  4. alert("La dirección de email " + valor + " es correcta.");
  5. } else {
  6. alert("La dirección de email es incorrecta.");
  7. }
  8. }
  9.  

Actualizado 20.junio.09
No se había contemplado la gestión de dominios de 4 letras como .mobi o .info.

Visualizar el Codigo
Visualiza el artículo
Descargar el Codigo
Descargar el código
Error en el Codigo
Error en el código
tags: , , , ,

Artículos relacionados:

40 comentarios »

Redifusión RSS de los comentarios de la entrada. TrackBack URI

1 2 3 4
  1. Raul
    Octubre 13, 2009 #

    La expresion que dejo alexander funciona bien, funciona mejor que la original

  2. marcela
    Octubre 28, 2009 #

    Estimados y que pasa cuando el mail tiene un “_” , “-”, “.” por ejemplo

    macela.godoy@usach.cl
    m_godoy@usach.cl
    m-godoy@usach.cl

    que pasa en esos casos. por que por el momento me da error en todos esso casos-
    gracias,.

  3. Cesar
    Noviembre 13, 2009 #

    Hola, lo que pasa es que siempre me sale que el correo esta incorrecto cuando el correo esta bien, depronto algo le falta al codigo, gracias.

  4. Cyrus
    Noviembre 18, 2009 #

    Por completar un poco más, yo creo que el dominio principal, .es .com .mobi no puede tener números, se podria ajustar un poco mas poniendo [a-Z]{2,4} en vez de \w{2,4}.

  5. jLNX
    Diciembre 1, 2009 #

    OOO ME FUNCIONÓ GENIAL…. JUSTAMENTE LO QUE BUSCABA MUCHAS GRACIAS

  6. ControlCalidad
    Diciembre 17, 2009 #

    Amigo la forma propuesta [a-Z]{2,4} para aceptar sólo letras al final del dominio es incorrecta, para lograr el mismo efecto y evitar números debe usarse \D{2,4} en vez de \w{2,4}

    Lo anterior aceptará sólo letras. Está probado
    Saludos

  7. usuario de paso
    Diciembre 17, 2009 #

    (sorry, sólo me estoy incribiéndome para recibir comentarios)

  8. iroh
    Enero 28, 2010 #

    “Amigo la forma propuesta [a-Z]{2,4} para aceptar sólo letras al final del dominio es incorrecta, para lograr el mismo efecto y evitar números debe usarse \D{2,4} en vez de \w{2,4}

    Lo anterior aceptará sólo letras. Está probado”

    lo he probado asi y nada de nada man, sigue mandando el mensaje que le puse que estaba incorrecto, ademas la funcion la he implementado de la siguiente forma por si a alguien le interesa:

    if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\D{2,4})+$/.test(valor))
    {
    alert(“El Email ingresado es incorrecto.”);
    Email.focus();
    Email.select();
    return false;
    }

    aun de esta forma, aplicando el cambio de alexander y de ControlCalidad no funciona, me sigue mandando el mensaje que le pedi me mandara cuando esta erroneo el email… :/

  9. Jinx
    Febrero 9, 2010 #

    Lo probé, y no funciona, y me estoy volviendo loco. Agarré el Visual Web Developer, copié la función de validación y aún así no anda.
    Alguien que sepa como hacerlo, que lo diga. En este caso, probado desde el link que se provee, sigue dando que el mail es incorrecto.

  10. PepoRuiz
    Abril 15, 2010 #

    Compañeros, todos hemos pasado rompiéndonos la cabeza para encontrar una expresión regular que nos funcione… les dejo una página donde pueden encontrar algunas soluciones:
    http://regexlib.com/DisplayPatterns.aspx
    vayan a la seccion EMAIL y obtendrán muchas respuestas…

    que tengan un excelente dia…

1 2 3 4

Deje un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*