史上最复杂的验证邮件地址的正则表达式

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

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

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

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

验证邮件地址的通用正则表达式(符合 RFC 5322 标准)

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

Python

这个是个简单的版本:

Javascript

这个有点复杂了:

Swift

PHP

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

Perl / Ruby

?? PHP ????Perl ? Ruby ???????????

Perl / Ruby

?? PHP ????Perl ? Ruby ???????????

Perl 5.10 ?????

????????????????????????????????????? Perl ?????????????????????

Ruby (简单版)

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

.NET

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

grep 命令

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

SQL Server

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

Oracle PL/SQL

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

MySQL

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

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

1 1 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部