【问题标题】:Email Validation using Python Regular Expression使用 Python 正则表达式进行电子邮件验证
【发布时间】:2020-07-22 04:46:22
【问题描述】:

我有 9 种电子邮件模式。我期望:

  • myname@domainemail.com
  • my.name@domainemail.com
  • my.name1@domainemail.com
  • my_name.1@domainemail.com 是有效的电子邮件。

  • my-name@domainemail.com
  • my.name.1@domainemail.com
  • 域名.1@domainemail.com
  • 1myname@domainemail.com
  • 1.myname@domainemail.com 不是有效的电子邮件。

然后,我制作了正则表达式的脚本,例如:

regex = r"(^[a-zA-Z_]+[\.]?[a-z0-9]+)@([\w.]+\.[\w.]+)$"

但是,电子邮件 domainname.1@domainemail.com 仍然有效。

如何制作正确的模式正则表达式,使电子邮件变得无效,并且所有电子邮件模式都符合我的期望?

【问题讨论】:

  • 也许^(?![a-zA-Z]+\.\d+@)[a-zA-Z_]+(?:\.[a-z0-9]+)?@[\w.]+\.\w+$ 可以,见demo
  • 也许有一个与下划线匹配的可选部分或在点^[a-zA-Z]+(?:(?:(?:_[a-zA-Z0-9]+)+\.[A-Za-z0-9]+)|\.[a-zA-Z][a-zA-Z0-9]*)?@\w+(?:\.\w+)+regex101.com/r/Q3TxQc/1之前以a-z开始匹配

标签: python regex validation email-validation


【解决方案1】:

对于示例数据,您可以匹配带有下划线的可选部分,其中@之前允许点后跟数字

或者你匹配一个在@之前有一个点和一个字符的部分

 ^[a-zA-Z]+(?:(?:_[a-zA-Z0-9]+)+\.[A-Za-z0-9]+|\.[a-zA-Z][a-zA-Z0-9]*)?@(?:[a-zA-Z0-9]+\.)*[a-zA-Z0-9]{2,}$

说明

  • ^ 字符串开始
  • [a-zA-Z]+ 匹配 1+ 次 char a-z
  • (?:非捕获组
    • (?:_[a-zA-Z0-9]+)+ 重复 1+ 次下划线后跟字符 a-z 或数字 0-9
    • \.[A-Za-z0-9]+ 匹配一个点和 1+ 个字符 a-z 或数字 0-9
    • |或者
    • \.[a-zA-Z][a-zA-Z0-9]* 匹配一个点和一个字符 a-z 和 0+ 个字符 a-z 或数字
  • )? 关闭群组并将其设为可选
  • @ 字面上匹配
  • (?:[a-zA-Z0-9]+\.)* 重复 0+ 次 a-z0-9 后跟一个点
  • [a-zA-Z0-9]{2,} 匹配 a-z0-9 2 次或更多次
  • $ 字符串结束

Regex demo

【讨论】:

    【解决方案2】:

    使用带有gmi 标志的以下正则表达式模式:

    ^[a-z]+(?:(?:\.[a-z]+)+\d*|(?:_[a-z]+)+(?:\.\d+)?)?@(?!.*\.\.)[^\W_][a-z\d.]+[a-z\d]{2}$
    

    https://regex101.com/r/xoVprE/4

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2015-01-15
      • 2014-03-03
      • 2020-11-04
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      相关资源
      最近更新 更多