我需要使用 python 验证电子邮件

I need to validate email using python

有效邮箱的条件是

1.It不包含空格,

2.It包含@符号,

3.After@,有一个点。

并且请注意,点也可能出现在@之前,在正确的地址中,点不应紧跟在@之后。

我已经尝试并编写了以下代码。

def check_email(string):
    a = ' ' in string
    r = 0
    if a != False:
        b = "@" in string
        if b == True:
            c = "@." in string
            if c == True:
                r = False
            else:
                r = True    
        else:
            r = False    
    else:
        r = False
    return r
a = input("Enter your email :")
print(check_email(a))

现在我无法检查错误。

测试样本即

我的邮箱是:this@example.com

正确输出: 假

我的代码输出: 真

如果 aTrue

a != False 计算为 True,如果 aFalse,则 False 计算为 True。换句话说,它的计算结果为 a.

考虑到这一点,您的代码中的错误变得更加明显:如果 string 中没有 space,那么 a 将是 False,第一个 if 语句的 else 部分将设置 r = False 和函数 returns.

避免在 if 条件中将布尔文字与布尔变量进行比较将使您的代码更加清晰,并有助于发现此类问题。这样做也是完全没有必要的;例如,if a != False:if a: 是一回事,但更清楚第二个在做什么。同样,if c == Trueif c: 相同。

这是您的代码的工作版本:

def check_email(string):
    a = ' ' in string
    r = 0
    if not a:
        b = "@" in string
        if b:
            c = "@." in string
            if c:
                r = False
            else:
                r = True    
        else:
            r = False    
    else:
        r = False
    return r
a = input("Enter your email :")
print(check_email(a))

但是,如果您考虑使用 regular expressions, or as suggested in another answer, third-party packages 等解决方案,从长远来看 运行 对您来说会更好。特别是,使用您目前使用的方法很难以优雅的方式满足问题中的第三个条件。

使用正则表达式的可能解决方案:

import re
def email_is_correct(email):
    return bool(re.fullmatch("[a-zA-Z0-9.]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+", email)) and True

我会选择基于正则表达式的检查,但是如果您只想使用基本的字符串函数,这里是要求的 3 个检查(没有 space;包含 @;在 @ 之后包含一个点,但不包含之后立马 @)。它允许像 @@?. 这样的废话,正则表达式真的好多了。

def check_email(string):
    if ' ' in string:
        return False
    if "@" not in string:
         return False
    name, domain = string.split('@', 1)
    if '.' not in domain[1:]:
        return False
    return True

请注意,函数不限于最后一个 return。尽快 return 编辑结果后,看看代码如何变得可读。

def check_email(string):
    return string.find(" ") == -1 and string.find("@") != -1 and string.find("@.") == -1 and string.find(".", string.find("@")) != -1