设为首页 加入收藏

TOP

史上最复杂的验证邮件地址的正则表达式
2015-08-31 21:25:19 来源: 作者: 【 】 浏览:33
Tags:史上最 复杂 验证 邮件 地址 正则 表达式

用正则表达式验证邮件地址似乎是一件简单的事情,但是如果要完美的验证一个合规的邮件地址,其实也许很复杂。



邮件地址的规范来自于 RFC 5322?。有一个网站 emailregex.com?专门列出各种编程语言下的验证邮件地址的正则表达式,其中很多正则表达式都是我听说过而从未见过的复杂——我想说,做这个网站的程序员是被邮件验证这件事伤害了多深啊!


其实,在产品环境中,一般来说并不需要这么复杂的正则表达式来做到99.99%正确。一般来说,从执行效率和测试覆盖率来说,只需要一个简单的版本即可:


那么下面我们来看看这些更严谨、更复杂的正则表达式吧:


?


由于各种语言对正则表达式的支持不同、语法差异和覆盖率不同,所以,不同语言里面的正则表达式也不同:


?


这个是个简单的版本:


?


这个有点复杂了:


?


?


PHP 的这个版本就更复杂了,覆盖率就更大一些:


?


对与 PHP 的版本,Perl 和 Ruby 表示不服,可以更严谨:


?


上面的版本,嗯,我可以说是天书吗?反正我是没有解读的想法了。当然,新版本的 Perl 语言还有一个更易读的版本(你是说真的么?)?


?


Ruby 表示,其实人家还有个简单版本:


?


这样的版本谁没有啊——.NET 说:


?


用 grep 命令在文件中查找邮件地址,我想你不会写个若干行的正则表达式吧,意思一下就行了:


在 SQL Server 中也是可以用正则表达式的,不过这个代码片段应该是来自某个产品环境中的,所以,还体贴的照顾了那些把邮件地址写错的人:


?


这个是不是有点偷懒?尤其是在那些“复杂”的正则表达式之后:


?


好吧,看来最后也一样懒:


那么,你有没有关于验证邮件地址的正则表达式分享给大家?


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android判断相机图片朝向 下一篇Python2.7.7源码分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: