【问题标题】:How to check that the string is email?如何检查字符串是否为电子邮件?
【发布时间】:2013-03-12 18:18:25
【问题描述】:

我目前使用以下代码:

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 only (好的,可能带有前导或/和尾随空格,没有其他字符)。

PS。我也认为可能我应该使用mail.is_email_valid 而不是正则表达式,它will allow me 来支持像.museam 这样的长域或像.рф 这样的本地域。

【问题讨论】:

标签: python regex email


【解决方案1】:

为什么不使用 \b 作为电子邮件前后的单词边界?

【讨论】:

    【解决方案2】:

    使用这个正则表达式:

    \s?[A-Z0-9_-+%]+@[A-Z0-9_-+%]+\.[A-Z0-9]\s?
    

    【讨论】:

      【解决方案3】:

      您需要在开头添加 ^ 表示“文本从这里开始”,并在末尾添加 $ 表示“此处不再有文本”。

      那会给出:

      r'^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$'

      【讨论】:

      • 不考虑“好的,可能带有前导或/和尾随空格,没有其他字符”...在 ^ 之后和 $ 之前添加 '\s*' 会更好。
      • 好主意,虽然有空格,但它不是有效的电子邮件。也许在做任何事情之前修剪用户输入会更好。例如,这也将考虑到在数据库中保存带有空格的电子邮件
      猜你喜欢
      • 2016-12-12
      • 2013-05-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2015-08-07
      • 2019-05-14
      • 2011-06-03
      相关资源
      最近更新 更多