validar sub solo regulares letras expresiones ejemplos cuenta correo con python regex email-validation email-address

sub - validar email con python



Python verifica si hay una dirección de correo electrónico válida (17)

¿Hay una buena manera de verificar un ingreso de formulario usando regex para asegurarse de que sea la dirección de correo electrónico correcta? He estado buscando desde la última noche y todos los que respondieron preguntas de la gente con respecto a este tema también parecen tener problemas si se trata de una dirección de correo electrónico subdividida.


¡Las direcciones de correo electrónico no son tan simples como parecen! Por ejemplo, Bob_O''[email protected], es una dirección de correo electrónico válida.

He tenido algo de suerte con el paquete de lepl ( http://www.acooke.org/lepl/ ). Puede validar direcciones de correo electrónico como se indica en RFC 3696: http://www.faqs.org/rfcs/rfc3696.html

Encontrado un código viejo:

import lepl.apps.rfc3696 email_validator = lepl.apps.rfc3696.Email() if not email_validator("[email protected]"): print "Invalid email"


El parseaddr mencionado anteriormente ignoraría el @ final.

from email.utils import parseaddr parseaddr(''aaa@[email protected]'') ('''', ''aaa@bbb'')

¿Probablemente extraer la dirección y compararla con el original?

¿Alguien ha intentado validar.email?


Encontré una excelente (y probada) forma de verificar si hay una dirección de correo electrónico válida. Pego mi código aquí:

# here i import the module that implements regular expressions import re # here is my function to check for valid email address def test_email(your_pattern): pattern = re.compile(your_pattern) # here is an example list of email to check it at the end emails = ["[email protected]", "[email protected]", "wha.t.`1an?ug{}[email protected]"] for email in emails: if not re.match(pattern, email): print "You failed to match %s" % (email) elif not your_pattern: print "Forgot to enter a pattern!" else: print "Pass" # my pattern that is passed as argument in my function is here! pattern = r"/"?([-a-zA-Z0-9.`?{}]+@/w+/./w+)/"?" # here i test my function passing my pattern test_email(pattern)


Encontrar ID de correo electrónico:

import re a=open("aa.txt","r") #c=a.readlines() b=a.read() c=b.split("/n") print(c) for d in c: obj=re.search(r''[/w.]+/@[/w.]+'',d) if obj: print(obj.group()) #for more calcification click on image above..


Esto generalmente se resuelve usando expresiones regulares. Sin embargo, hay muchas variaciones de soluciones. Dependiendo de cuán estricto necesite ser, y si tiene requisitos personalizados para la validación, o aceptará cualquier dirección de correo electrónico válida.

Consulte esta página para referencia: http://www.regular-expressions.info/email.html


La única forma realmente precisa de distinguir las direcciones de correo electrónico válidas y reales de las no válidas es enviarle correos . Lo que cuenta como un correo electrónico es sorprendentemente intrincado ( "John Doe" <[email protected]>" realidad es una dirección de correo electrónico válida), y lo más probable es que desee que la dirección de correo electrónico le envíe el correo más tarde. algunos controles básicos de cordura (como en la respuesta de Thomas, tiene un @ y al menos uno después del @ ), probablemente solo deba enviar una carta de verificación de correo electrónico a la dirección, y esperar a que el usuario siga un enlace incrustado en el mensaje para confirmar que el correo electrónico era válido.


La biblioteca estándar de Python viene con una función de análisis de correo electrónico: email.utils.parseaddr() .

Devuelve dos tuplas que contienen el nombre real y las partes reales de la dirección del correo electrónico:

>>> from email.utils import parseaddr >>> parseaddr(''[email protected]'') ('''', ''[email protected]'') >>> parseaddr(''Full Name <[email protected]>'') (''Full Name'', ''[email protected]'') >>> parseaddr(''"Full Name with quotes and <[email protected]>" <[email protected]>'') (''Full Name with quotes and <[email protected]>'', ''[email protected]'')

Y si el análisis no tiene éxito, devuelve dos tuplas de cadenas vacías:

>>> parseaddr(''[invalid!email]'') ('''', '''')

Un problema con este analizador es que acepta cualquier cosa que se considere como una dirección válida de correo electrónico para RFC-822 y amigos, incluidas muchas cosas que claramente no se pueden abordar en Internet:

>>> parseaddr(''invalid@example,com'') # notice the comma ('''', ''invalid@example'') >>> parseaddr(''invalid-email'') ('''', ''invalid-email'')

Entonces, como lo dijo @TokenMacGuy, la única forma definitiva de verificar una dirección de correo electrónico es enviar un correo electrónico a la dirección esperada y esperar a que el usuario actúe según la información contenida en el mensaje.

Sin embargo, es posible que desee comprobar, al menos, la presencia de un signo @ en el segundo elemento de tupla, como @bvukelic sugiere:

>>> ''@'' in parseaddr("invalid-email")[1] False

Si quiere dar un paso más, puede instalar el proyecto dnspython ( o este para Python 3 ) y resolver los servidores de correo para el dominio de correo electrónico (la parte después de la ''@''), solo tratando de enviar una e -mail si hay servidores MX reales:

>>> from dns.resolver import query >>> domain = ''foo@[email protected]''.rsplit(''@'', 1)[-1] >>> bool(query(domain, ''MX'')) True >>> query(''example.com'', ''MX'') Traceback (most recent call last): File "<stdin>", line 1, in <module> [...] dns.resolver.NoAnswer >>> query(''not-a-domain'', ''MX'') Traceback (most recent call last): File "<stdin>", line 1, in <module> [...] dns.resolver.NXDOMAIN

Puede capturar NoAnswer y NXDOMAIN capturando dns.exception.DNSException .

Y sí, foo@[email protected] es una dirección sintácticamente válida. Solo se debe considerar el último @ para detectar dónde comienza la parte del dominio.


Las direcciones de correo electrónico son increíblemente complicadas. Aquí hay una expresión regular de muestra que coincidirá con cada dirección válida de RFC822: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Notarás que probablemente sea más largo que el resto de tu programa. Incluso hay módulos completos para Perl con el fin de validar las direcciones de correo electrónico. Por lo tanto, probablemente no obtendrá nada que sea 100% perfecto como expresión regular y también legible. Aquí hay un analizador de bajadas recursivo de muestra: http://cpansearch.perl.org/src/ABIGAIL/RFC-RFC822-Address-2009110702/lib/RFC/RFC822/Address.pm

pero deberá decidir si necesita un análisis perfecto o un código simple.


No he visto la respuesta aquí entre el lío de respuestas Regex personalizadas, pero ...

Python tiene un módulo llamado validate_email que tiene 3 niveles de validación de correo electrónico, que incluye solicitar un servidor SMTP válido si la dirección de correo electrónico es válida (sin enviar un correo electrónico).

Comprobar la cadena de correo electrónico es un formato válido:

from validate_email import validate_email is_valid = validate_email(''[email protected]'')

Verifica si el host tiene servidor SMTP:

is_valid = validate_email(''[email protected]'',check_mx=True)

Compruebe si el host tiene el servidor SMTP y realmente existe el correo electrónico:

is_valid = validate_email(''[email protected]'',verify=True)

Para aquellos interesados ​​en los detalles sucios, validate_email.py ( source ) apunta a ser fiel a RFC 2822 .

Todo lo que realmente estamos haciendo es comparar la cadena de entrada con una expresión regular gigantesca. Pero construir esa expresión regular, y garantizar su corrección, se hace mucho más fácil ensamblándola a partir de los "tokens" definidos por la RFC. Cada uno de estos tokens se prueba en el archivo de prueba de la unidad que lo acompaña.

Para instalar con pip

pip install validate_email

y necesitará el módulo pyDNS para verificar los servidores SMTP

pip install pyDNS


No tiene sentido. Incluso si puede verificar que la dirección de correo electrónico sea sintácticamente válida, igual deberá verificar que no haya sido mal escrita, y que realmente le llegue a la persona que cree que tiene. La única forma de hacerlo es enviarles un correo electrónico y hacerles clic en un enlace para verificar.

Por lo tanto, una verificación básica (por ejemplo, que no ingresaron accidentalmente en su dirección) suele ser suficiente. Algo así como: tiene exactamente un signo @ , y al menos uno . en la parte después del @ :

[^@]+@[^@]+/.[^@]+

Probablemente también desees no permitir espacios en blanco, probablemente haya direcciones de correo electrónico válidas con espacios en blanco, pero nunca he visto uno, por lo que las probabilidades de que se trate de un error de usuario están de tu parte.

Si desea el cheque completo, eche un vistazo a esta pregunta .

Actualización: Así es cómo podría usar cualquier expresión regular de ese tipo:

import re if not re.match(r"... regex here ...", email): # whatever

Tenga en cuenta la r en frente de la cadena; De esta forma, no necesitarás escapar de las cosas dos veces.

Si tiene una gran cantidad de expresiones regulares para verificar, podría ser más rápido compilar la expresión regular primero:

import re EMAIL_REGEX = re.compile(r"... regex here ...") if not EMAIL_REGEX.match(email): # whatever


Para comprobar el uso del correo electrónico email_validator

from email_validator import validate_email, EmailNotValidError def check_email(email): try: v = validate_email(email) # validate and get info email = v["email"] # replace with normalized form print("True") except EmailNotValidError as e: # email is not valid, exception message is human-readable print(str(e)) check_email("test@gmailcom")


Si desea sacar el correo de una cadena o archivo largo, intente esto.

([^@|/s]+@[^@]+/.[^@|/s]+)

Tenga en cuenta que esto funcionará cuando tenga un espacio antes y después de su dirección de correo electrónico. si no tiene espacio o tiene algunos caracteres especiales, puede intentar modificarlos.

Ejemplo de trabajo:

string="Hello ABCD, here is my mail id [email protected] " res = re.search("([^@|/s]+@[^@]+/.[^@|/s]+)",string,re.I) res.group(1)

Esto eliminará [email protected] de esta cadena.

Además, tenga en cuenta que esta puede no ser la respuesta correcta. Pero la he publicado aquí para ayudar a alguien que tiene requisitos específicos como yo.


Veo muchas respuestas complicadas aquí. Algunos de ellos, fallan en el conocimiento simple, verdadera dirección de correo electrónico, o tienen falsos positivos. A continuación, se muestra la forma más sencilla de probar que la cadena sería un correo electrónico válido. Prueba contra TLD de 2 y 3 letras. Ahora que técnicamente puede tener los más grandes, es posible que desee aumentar el 3 a 4, 5 o incluso 10.

import re def valid_email(email): return bool(re.search(r"^[/w/./+/-]+/@[/w]+/.[a-z]{2,3}$", email))


validación de correo electrónico

import re def validate(email): match=re.search(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9]+/.[a-zA-Z0-9.]*/.*[com|org|edu]{3}$)",email) if match: return ''Valid email.'' else: return ''Invalid email.''


"^[/w/./+/-]+/@[/w]+/.[a-z]{2,3}$"


import re def email(): email = raw_input("enter the mail address::") match = re.search(r''[/w.-]+@[/w.-]+./w+'', email) if match: print "valid email :::", match.group() else: print "not valid:::" email()