使用RegEx在PHP中使用多级域验证电子邮件地址

时间:2017-06-26 17:42:58

标签: php regex

需要验证单个域级别或多级域名的电子邮件地址。(实际上是域级别< = 4)

标准

  • 电子邮件(用户名)应以字母[a-z]开头,它可能包含数字,但不包括第一个字母和句点(。)没有其他字符
  • @符号后,每个域名应以字母开头。(最小长度为2)
  • 最大域数< = 4。
  

例如:email@my.sub.mail.com

以上示例有4个域;

  • my
  • mail
  • 玉米

我尝试使用此RegEx:

^[a-zA-Z](:?[a-zA-Z0-9._-])+(@[a-zA-Z]+[a-zA-Z0-9_-])+\.+(([a-zA-Z]){2,6})$

但是正则规则正确无法正确验证多个域。它只获得1个域名。   例如:myemail@gmail.com

在线正则表达:https://regex101.com/r/7SXS1Z/1

2 个答案:

答案 0 :(得分:1)

您的正则表达式在接受电子邮件地址时应用了更多规则。例如。允许电子邮件地址包含多个@符号。像你自己的规则一样简单:

^[a-z][^@]*@(([a-z][a-z0-9-]+)\.){0,3}(?2)$

Live demo

答案 1 :(得分:1)

也许这就是你正在寻找的东西

^
[a-zA-Z][-.\w]*       # before @
@
[a-zA-Z][-.\w]+       # first subdomain
(?:
    \.[a-zA-Z][-.\w]+ # eventually others
){1,3}
$

请参阅a demo on regex101.com