【问题标题】:Email regular expression with second level Tld具有二级 Tld 的电子邮件正则表达式
【发布时间】:2012-09-24 22:25:28
【问题描述】:

我正在尝试创建一个 EMAIL 正则表达式。 这就是我想要实现的目标:

“_A-Za-z0-9-”,可选后跟“.[_A-Za-z0-9-]”,并以“@”符号结尾。电子邮件的域名必须以“A-Za-z0-9”开头,后跟第一级 Tld (.com, .net) “.[A-Za-z0-9]”,可选后跟第二级 Tld ( .com.au, .com.my) “ .[A-Za-z]{2,}”,其中二级 Tld 必须以点“.”开头并且长度必须等于或大于 2 个字符。

这是我目前所拥有的:

([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\w?\.[A-Za-z]{2,})

不适合我。 我希望它验证这些电子邮件:

myname@compgg.com
ffdicot@foobar.com.au
i3dicot@foobar.co.uk

而不是:

myname@foobar.foo.bar.com

有什么建议吗?

【问题讨论】:

标签: regex email-validation


【解决方案1】:

不要。

这是RFC2822对应的正则表达式:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

最好将其实现为单独的函数,每个函数检查不同的需求...

【讨论】:

  • 您的意思是拆分“@”并单独测试每个部分?最好/正确的方法是什么?
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 2012-01-02
  • 2015-12-03
相关资源
最近更新 更多