Pons Asinorum

El hablar, por su facilidad, puede ser imitado por todo un pueblo; la imitación en el pensar, del inventar, ya es otra cosa.

Validando emails

Publicado el 13 de Enero de 2008

Nunca entenderé por qué algunos programadores se preocupa hasta el paroxismo por controlar que las cuentas de correo de los formularios estén correctas.
Luego sin embargo puedes inventarte teléfonos, colocar una misma letra mil veces en el nombre, inventarte países de residencia. Todo eso parece dar igual.
function isEmail(str)
{
var regex = /^[-_.a-z0-9]+@(([-_a-z0-9]+\.)+(ad|ae|aero|af|ag|
ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|
bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|
ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|
dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|
gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|
hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|
kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|
ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|
mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|
nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|
re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|
su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|
ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|
zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
}

Comentarios

20 comentarios a “Validando emails”

  1. nachopro
    Enero 13th, 2008 @ 20:16

    y… elemental!
    el mail va a ser el único medio de contacto que le quede al encargado del formulario en el caso que el emisor ingrese algún dato inválido…

  2. auster
    Enero 13th, 2008 @ 20:45

    Y dale con los siervos.

  3. Eduardo
    Enero 13th, 2008 @ 20:50

    Así como es también la única forma de tener un medio de hacer llegar publicidad con seguridad de ser recibida.

  4. discobanco
    Enero 13th, 2008 @ 20:56

    Una posible respuesta es que hay muchos jefes de proyecto inútiles.

  5. Martí
    Enero 13th, 2008 @ 21:14

    La función ya está desfasada. Falta el .cat.

  6. Guitardo
    Enero 13th, 2008 @ 21:57

    ¿Puede ser para evitar posibles errores por parte del usuario a la hora de escribirla? Creo que será eso, más que por razones de seguridad ya que cualquier dato es fácilmente falseable, como apuntaís.

  7. mabarroso
    Enero 13th, 2008 @ 22:27

    No suele ser decisión nuestra, pero la razón principal siempre es la importancia. El correo electrónico casi siempre es el dato más importante, o bien a nivel de la aplicación, para la que el resto de los datos giran entorno a él, o bien para los departamentos de marketing y/o publicidad, que sólo emplean el resto de los datos para segmentar.

  8. rsp
    Enero 13th, 2008 @ 22:36

    Mucha tonteria y yo siempre pongo
    test@test.com
    (tb para escribir este comentario)

  9. kenem
    Enero 13th, 2008 @ 23:22

    Además, falla con las direcciones .cat

  10. Luciano
    Enero 13th, 2008 @ 23:46

    Interesante… Probablemente dado el anonimato que brinda la web, la dirección de mail es lo más “tangible” que podemos exigir a un usuario, a través de lo cual lo vamos a spammear incesantemente luego de validar que la dirección es correcta :P
    Como desarrollador de software que soy, he visto bugs graves con las direcciones de residencia, pero no daré pistas :P

  11. Blaxter
    Enero 14th, 2008 @ 0:05

    Hombre esa función es algo exagerado, pero comprobar el dominio del correo con un dns mx si que lo he usado muchas veces y creo que es bastante recomendable si te lo puedes permitir.
    Así compruebas de verdad que el mail “puede” ser válido y evitas tener mails modo test@test.com como dice rsp :P. La comprobación en código son dos líneas, el tiempo debería ser menor a 500ms (pones un timeout) y consigues aumentar considerablemente la fiabilidad.

  12. antiflag
    Enero 14th, 2008 @ 10:28

    Estoy de acuerdo. Creo que debe validarse que un email tenga “algo”, una arroba, otro “algo” y un “puntoalgo”. Y ya está, nada más. A partir de aquí creo que la solución pasa por mandar al email una clave de confirmación con un tiempo de vida. Si pasado ese tiempo de vida la cuenta no ha sido confirmada, eliminamos los datos de registro.
    Una posible solución para evitar quebraderos de cabeza.

  13. naide
    Enero 14th, 2008 @ 13:34

    Pa ver si cuela el .xxx

  14. Alex
    Enero 14th, 2008 @ 14:41

    ¿No sería más sencillo hacer un ping al dominio?

  15. antonio
    Enero 14th, 2008 @ 15:36

    1. ¿Por qué me piden mi email en este formulario?
    2. ¿Se valida?
    3. Creo que el mejor recurso para validar emails que existe es tener que introducirlos por duplicado (como las contraseñas). Esto no sólo verifica que esté bien escrito sino que aparta a algunos usuarios dolosos, pero perezosos.

  16. fiero
    Enero 14th, 2008 @ 16:00

    Probando si este blog valida porron@porron.porron … :)

  17. Blaxter
    Enero 14th, 2008 @ 22:57

    @Alex, hacer un ping al dominio no te dice que ese dominio tenga correo electrónico. Aparte de que es mucho más lento que una consulta dns

  18. lalala
    Enero 18th, 2008 @ 18:32

    La respuesta es muy facil, lo interesante de todos los datos es el correo electronico para poder mandar spam.
    El resto no es * (obligatorio)

  19. Lucas
    Enero 20th, 2008 @ 22:46

    Hola, en el sistema que actualmente construimos en el curro, la expresión regular que utilizo, es aquella que cumple con la
    RFC2822. Sólo soporta formatos de direcciones “addr-spec” with “dot-atom”, esto es, (ATEXT_TOKEN+(\.ATEXT_TOKEN+)*) @ (ATEXT_TOKEN+(\.ATEXT_TOKEN+)*)
    La expresión regular queda como (Java regex):
    ([a-zA-Z0-9!#\$%\&'\*\+\-/=\?\^_`\{\|\}~]+(\.[a-zA-Z0-9!#\$%\&'\*\+\-/=\?\^_`\{\|\}~]+)*)@([a-zA-Z0-9!#\$%\&'\*\+\-/=\?\^_`\{\|\}~]+(\.[a-zA-Z0-9!#\$%\&'\*\+\-/=\?\^_`\{\|\}~]+)*)
    Ni que decir que no valida el dominio, pues según la RFC, no hay lista de dominios a validar, pues un correo electronico no tiene por que tener dominio de primer nivel (TLD) com, es, org, … Los correos son basicamente identificador@servidor, donde servidor puede ser cualquier cosa (un nombre de máquina).

  20. Hugo
    Junio 24th, 2008 @ 13:00

    Buscando cosas de estas me acordé de este post y por el camino he encontrado esto otro,
    http://fightingforalostcause.net/misc/2006/compare-email-regex.php
    [Comentario zrubavel: Gracias Hugo, es interesante que una validación tan absurda y empleada ni siquiera esté bien hecha y que haya tenido que revolver tanto para encontrar algo aceptable.]

Escribe un comentario





Suscribirme sin comentar

Contacto

Si quieres contactar con el autor de esta página, hazlo desde aquí.

Suscribirse

Buscar

Recomendaciones