如何验证字符串是否为邮箱?

0 投票
3 回答
668 浏览
提问于 2025-04-17 20:00

我现在使用以下代码:

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}$'

撰写回答