关于re邮箱格式校验
以下是我使用re对邮箱格式合法性进行验证的代码:re.search(r'+@+\.{2,}', receivers)
发现它对于含有两个@@的邮件地址如:xxx@@xx.xx 无能为力。
请问是什么原因?并请赐教完美的验证re代码! 问题出在正则表达式中的第一个部分 + 。这个部分表示匹配一个或多个字母、数字、下划线、百分号、加号、减号、点号。然而,它并没有考虑到 @ 符号。
所以,当邮件地址中有两个 @ 符号时,正则表达式会匹配到第一个 @ 符号之前的部分,然后匹配到第二个 @ 符号之后的部分,而不会检查 @ 符号的数量是否正确。
为了解决这个问题,我们可以在正则表达式中添加对 @ 符号的检查。以下是一个修正后的正则表达式:
re.search(r'+@+\.{2,}', receivers)
这个正则表达式将会匹配一个或多个字母、数字、下划线、百分号、加号、减号、点号,接着是一个 @ 符号,然后是一个或多个字母、数字、减号、点号,最后是一个点号和两个或更多字母。
这样,正则表达式就可以正确地验证邮箱地址的格式了。 使用正则表达式进行邮箱格式校验时,您遇到的问题是由于正则表达式中的.匹配了除换行符外的任意字符,导致在匹配邮箱地址时,出现了多个@的情况。为了解决这个问题,可以使用非贪婪匹配方式,将.匹配改为[^@],表示匹配除@以外的任意字符。
以下是修正后的正则表达式:
import re
receivers = 'xxx@@xx.xx'
pattern = r'+@[^@]+\.{2,}'
if re.search(pattern, receivers):
print('合法的邮箱地址')
else:
print('非法的邮箱地址')
这样,只有合法的邮箱地址才会通过验证。
值得注意的是,尽管使用正则表达式可以对大多数合法的邮箱地址进行基本的验证,但它并不能完全覆盖所有可能的邮箱格式。邮箱地址的规范非常复杂,并且会随着不同的邮件服务提供商而有所差异。因此,建议综合使用正则表达式和其他验证方法,以确保您的代码能够正确处理各种情况。
如果问题已经解决,请设置最佳答案 isdkz 发表于 2023-8-22 12:44
问题出在正则表达式中的第一个部分 + 。这个部分表示匹配一个或多个字母、数字、下划线、 ...
不好意思我没看出和原代码有什么区别,能再看看吗 问题出在正则表达式的模式中,它匹配了多个连续的 @ 符号。如果你要确保只有一个 @ 符号,你可以修改正则表达式的模式。以下是一个修改后的示例代码:
import re
email_pattern = r'+@+\.{2,}'
receivers = ['xxx@xx.xx', 'xxx@@xx.xx']
for receiver in receivers:
if re.match(email_pattern, receiver) and receiver.count('@') == 1:
print(f"{receiver} 是一个有效的邮箱地址")
else:
print(f"{receiver} 不是一个有效的邮箱地址")
在上述代码中,我使用了 re.match() 函数来确保整个字符串与正则表达式的模式匹配。然后使用 receiver.count('@') 来统计 @ 符号的数量,以确保只有一个 @ 符号。如果两个条件都满足,则认为是一个有效的邮箱地址。
这样修改后的代码应该可以解决你遇到的问题,并且能够正确验证邮箱地址的合法性。 不知道你搞这么特殊有什么需求,不过规则是人家制定的,你这么搞也没有用啊。
"^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@+(?:[-.]+)*\\.+\\s*$"
这个是一个企业级的程序里copy出来的。
合法E-mail地址:
1. 必须包含一个并且只有一个符号“@”
2. 第一个字符不得是“@”或者“.”
3. 不允许出现“@.”或者.@
4. 结尾不得是字符“@”或者“.”
5. 允许“@”前的字符中出现“+”
6. 不允许“+”在最前面,或者“+@”
页:
[1]