使用Python正则表达式进行电子邮件验证



我有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
  • domainname.1@domainemail.com
  • 1myname@domainemail.com
  • 1.myname@domainemail.com不是有效的电子邮件

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

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

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

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

对于示例数据,您可以将可选部分与下划线匹配,其中允许在@之前加一个点和一个数字

或者你匹配一个在@之前有一个点和一个字符a-z的零件

^[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+次字符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演示

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

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

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

相关内容

  • 没有找到相关文章

最新更新