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.
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:
En fin, veamos las opciones que tenemos.
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…
const esCorreoElectronico = correoElectronico => /\S+@\S+/.test(correoElectronico);
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.
const esCorreoElectronico = correoElectronico => /\S+@\S+/.test(correoElectronico);
const correosParaProbar = ["foo@bar.baz", "HolaMundo@ejemplo.com", "ejemplo@asd.com", "mark@facebook.com", "pedro@gmail.com", "asd", "123"];
correosParaProbar.forEach(correo => {
console.log("¿El correo %s es válido? %s", correo, esCorreoElectronico(correo));
});
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.
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.
const esCorreoElectronico = correoElectronico => /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(correoElectronico);
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.
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?
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.
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.
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
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.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios