如何验证字符串是否为邮箱?
我现在使用以下代码:
regexp = re.compile(r'[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}', re.IGNORECASE)
email = regexp.findall(stext)
if email:
email = email[0]
但是即使stext
里除了电子邮件还有其他文字,它也能正常工作(比如说,some text email@example.com some other text
)。我想检查的是stext
里是否仅仅包含email@example.com
(当然,前后可以有空格,但不能有其他字符)。
另外,我觉得我可能应该用mail.is_email_valid
,而不是正则表达式,这样可以支持像.museam
这样的长域名,或者像.рф
这样的本地域名。
3 个回答
0
你为什么不在电子邮件前后使用 \b 来表示单词边界呢?
1
使用这个正则表达式:
\s?[A-Z0-9_-+%]+@[A-Z0-9_-+%]+\.[A-Z0-9]\s?
3
你需要在开头加上一个^,这表示“文本从这里开始”,然后在结尾加上一个$,这表示“这里之后没有更多的文本”。
这样就变成了:
r'^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$'