是否有一个好方法来检查表单输入使用正则表达式,以确保它是一个正确的风格的电子邮件地址?从昨晚开始搜索,每个人都回答了关于这个话题的问题,如果它是一个子域名的电子邮件地址,似乎也有问题。


当前回答

我在这里看到了很多复杂的答案。他们中的一些人,不知道简单,真实的电子邮件地址,或有假阳性。下面是测试字符串是否为有效电子邮件的最简单方法。它测试2和3个字母的TLD。现在技术上你可以有更大的,你可能希望增加3到4,5甚至10。

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

其他回答

检查电子邮件使用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")
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()
from validate_email import validate_email
is_valid = validate_email('example@example.com',verify=True)
print(bool(is_valid))

参见validate_email文档。

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

我还没有在这里的一堆自定义正则表达式答案中看到答案,但是……

存在一个名为py3-validate-email validate_email的python库,它有3个级别的电子邮件验证,包括询问有效的SMTP服务器电子邮件地址是否有效(不发送电子邮件)。

安装

python -m pip install py3-validate-email

基本用法:

from validate_email import validate_email
is_valid = validate_email(email_address='example@example.com', \
    check_regex=True, check_mx=True, \
    from_address='my@from.addr.ess', helo_host='my.host.name', \ 
    smtp_timeout=10, dns_timeout=10, use_blacklist=True)

对于那些对肮脏细节感兴趣的人,validate_email.py (source)旨在忠实于RFC 2822。

我们所做的只是将输入字符串与1进行比较 庞大的正则表达式。但是构建那个regexp 通过组装它,可以更容易地确保其正确性 从RFC定义的“令牌”。每一个符号都是 在附带的单元测试文件中测试。


你可能需要pyDNS模块来检查SMTP服务器

pip install pyDNS

或者来自Ubuntu

apt-get install python3-dns