我需要使用 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
正确输出:
假
我的代码输出:
真
如果 a
为 True
,a != False
计算为 True
,如果 a
为 False
,则 False
计算为 True
。换句话说,它的计算结果为 a
.
考虑到这一点,您的代码中的错误变得更加明显:如果 string
中没有 space,那么 a
将是 False
,第一个 if
语句的 else
部分将设置 r = False
和函数 returns.
避免在 if
条件中将布尔文字与布尔变量进行比较将使您的代码更加清晰,并有助于发现此类问题。这样做也是完全没有必要的;例如,if a != False:
与 if a:
是一回事,但更清楚第二个在做什么。同样,if c == True
与 if 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
有效邮箱的条件是
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
正确输出: 假
我的代码输出: 真
a
为 True
,a != False
计算为 True
,如果 a
为 False
,则 False
计算为 True
。换句话说,它的计算结果为 a
.
考虑到这一点,您的代码中的错误变得更加明显:如果 string
中没有 space,那么 a
将是 False
,第一个 if
语句的 else
部分将设置 r = False
和函数 returns.
避免在 if
条件中将布尔文字与布尔变量进行比较将使您的代码更加清晰,并有助于发现此类问题。这样做也是完全没有必要的;例如,if a != False:
与 if a:
是一回事,但更清楚第二个在做什么。同样,if c == True
与 if 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