python

Comprobar si es correo electrónico en Python

Ya 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 válido.

De nuevo lo digo, aunque el correo parezca válido, no lo sabremos hasta que lo comprobemos enviando un mensaje con un token o algo similar; pero bueno, el punto es ver si un correo es válido según su forma como cadena.

Al final, un usuario podría poner uno que sea temporal, o que sea falso, por lo que no importa mucho la validación, sino la comprobación de la existencia.

Método 1: ver si tiene un arroba

Este es el más fácil y simple, aunque dejará pasar correos mal formados, por ejemplo “juan@asd@asd” pero lo repito, es culpa del usuario si lo pone mal.

Comprobamos entonces si el arroba está en el correo. Así:

"""
Simple (pero no tan eficaz) manera de comprobar si es correo en Python
@author parzibyte
"""
 
correo = "contacto@parzibyte.me"
if "@" in correo:
 print("Es válido")
else:
 print("No es válido")

Como lo dije, el método dirá que sí es válido (aunque no sea cierto) si le ponen dos arrobas, o dejan el arroba sin nada más, etcétera. De todos modos, ahora vamos a ver el método que usa una expresión regular.

Expresión regular para comprobar correo electrónico en Python

Podemos usar el poder de las expresiones regulares para probar si un correo es válido. Para ello, vamos a encerrar esto en una función, de manera que quede expuesto de una manera simple.

Dicha función recibe una cadena y regresa un booleano indicando si es un correo electrónico válido o no.

import re
"""
 Usar expresiones regulares para ver si es un correo electrónico válido en Python
 Recuerda importar el módulo re
 Por cierto, está probado con Python 3, si usas la versión 2 y no funciona, no trates
 de adaptarlo, mejor actualiza tu versión
 @author parzibyte
"""
 
 
def es_correo_valido(correo):
    expresion_regular = r"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"
    return re.match(expresion_regular, correo) is not None

Es simple. Al probar con el método match, se devuelve None si no se cumple con la expresión regular, por eso es que regresamos el resultado de comparar si no es None. En pocas palabras, si regresa True es válido, si no, entonces no.

La expresión regular, aunque es larga, funciona. De hecho podemos probarla con esto:

# Probamos con algunos correos
correos = [
    "hola@", "contacto@parzibyte.me", "staff@hotmail.com",
    "juan.perez@sitio.com", "maggie@outlook.com", "parzibyte@gmail.com", "asd",
    "luis@gmail@hotmail.com"
]
 
for correo in correos:
    print("Probando si '{}' es válido...{}".format(correo,
                                                   es_correo_valido(correo)))

Funciona completamente bien.

Conclusión

Lo que resta decir es que nunca existirá el algoritmo perfecto, pero sí podemos cubrir los casos más comunes y acertar el 99 % de veces.

Como lo dije al principio, la manera que no falla es enviar un correo electrónico a esa dirección y hacer que el usuario verifique.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • Amigo muy buen aporte, pero como hago para validar un correo desde un input? tipo, ingresa el correo: por teclado lo escribes.... como hago para que al escribir el correo, python te valide que es un correo con @ y todo? hay alguna funcion que al colocarla te deje solamente escribir con el formato de correo? gracias

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.