Introducción

Sabemos que la validación del lado del cliente no sirve de mucho, únicamente para indicar al usuario si se ha equivocado en determinada cosa. De todos modos también podemos usar JavaScript del lado del servidor, en donde tendría más sentido validar un correo electrónico en JavaScript.

El punto es que veremos cómo comprobar si un string es un correo electrónico válido usando JavaScript.

Nota: mira aquí cómo validar un email en Python.

El problema y el algoritmo perfecto

No existe un algoritmo perfecto, eso ya debemos saberlo. Existen miles de expresiones regulares, desde las más simples hasta las más complejas. Veremos hoy las maneras recomendadas de hacerlas, pero al final te expones a dos cosas:

  • Permitir que cualquiera ponga un correo electrónico falso
  • Un usuario genuino escriba su correo pero tu expresión regular no lo permita

En fin, veamos las opciones que tenemos.

Validar email o correo electrónico de manera simple

Todos sabemos que un correo electrónico tiene el símbolo del arroba. Este: @. Bueno, podemos hacer una simple validación en donde haya algo antes del arroba, y algo después del arroba. Fácil y sencillo.

Eso quedaría en una expresión regular…

Tenemos a una simple función que recibe el correo y devuelve si pasa el test de una expresión regular. Analicemos un poco la expresión.

La \S sirve para representar cualquier cosa, el signo + sirve para indicar que la cosa que está anterior de él puede repetirse 1 o infinitas veces, pero no cero. El @ es literal, o sea, no tiene ningún significado. Y lo que está después del arroba es lo mismo que está antes de él.

Podemos probar a nuestra función y veremos que funciona de maravilla.

La salida es:

¿El correo foo@bar.baz es válido? true
¿El correo HolaMundo@ejemplo.com es válido? true
¿El correo ejemplo@asd.com es válido? true
¿El correo mark@facebook.com es válido? true
¿El correo pedro@gmail.com es válido? true
¿El correo asd es válido? false
¿El correo 123 es válido? false

Yo sé que foo@bar.baz probablemente no exista, pero sigue leyendo para que entiendas este punto. Lo que sí vemos es que a los que no llevan arroba no los deja pasar, y tenemos una validación simple. Con esto nos exponemos a tener correos falsos pero eso lo solucionamos más abajo.

Validar correo electrónico con expresión regular

Con esta expresión regular tendrás más oportunidades de eliminar los correos falsos o inventados, pero si tu expresión no entiende algunos de ellos, no los dejará pasar. Avisado estás; no recomiendo este enfoque en lo más mínimo.

Así es, probamos con una expresión más compleja. Los tests son iguales que arriba, y la salida también. Con este método aprovecharías el 99 % de los correos. Fuente.

Validación perfecta

Aquí viene la validación perfecta que no tiene fallas y es más que nada de diseño. ¿Para qué quieres el correo del usuario?

Para que inicie sesión en su cuenta

Muy bien, para que el usuario inicie sesión debe poner un correo. E incluso si no lo validas, debes enviarle un correo de confirmación al momento de registrarse. Además, si pone uno falso o temporal, más tarde no podrá resetear su contraseña o acceder a otras características.

Para mandarle boletines

Lo mismo de arriba, manda un correo de confirmación para que verifique que la dirección de correo electrónico le pertenece. Al final de todo, quien quiera recibir lo que quieres, lo recibirá. Quien no, pues no y ya. Mantén las cosas simples.

Es simplemente un dato de contacto

Aquí igualmente puedes mandar un correo de comprobación y en caso de que el usuario lo verifique, lo registras. Si no, no lo dejas usar tu servicio y ya.

Por otro lado, si alguien más registra el correo (por ejemplo la chica de recursos humanos) debe hacer una pequeña comprobación: los correos más populares son de gmail, hotmail y outlook. Alguien con sentido común no aceptaría el correo foo@bar.baz

Lo que yo recomiendo

Utiliza la validación simple, y siempre envía un correo de confirmación con un token único. Si el usuario es malicioso y pone algo mal es su culpa, pero te aseguras de no molestar a los usuarios genuinos.

Por otro lado, un usuario malicioso o “troll” siempre puede tomar correos de tempmailaddress.com y verificará el correo normalmente como uno genuino.

Es por eso que te digo que al final debemos confiar en que el usuario será genuino, mandar correos de comprobación para terminar el registro, y también podemos mandar correos periódicamente para saber si todavía le interesa estar registrado en nuestro servicio. Esto ya es más en el diseño de nuestra app.

Igualmente si el usuario necesita resetear su contraseña o cosas de esas tendrá que usar, la mayoría de veces, su correo electrónico.

No te vayas sin seguirme en Twitter, Facebook y GitHub, así me motivas a escribir más posts.
Igualmente te invito a suscribirte en la parte superior derecha escribiendo tu correo en el formulario.
Si tienes dudas déjalas en un comentario


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

1 Comment

Comprobar si es correo electrónico en Python - Parzibyte's blog · diciembre 4, 2018 a las 1:10 pm

[…] vimos cómo validar un correo o email en JavaScript. Ahora hagamos lo mismo con Python, veamos una forma de saber si el usuario puso un correo […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: