当前位置:  开发笔记 > 编程语言 > 正文

什么是全局接受的正则表达式来匹配电子邮件地址

如何解决《什么是全局接受的正则表达式来匹配电子邮件地址》经验,为你挑选了3个好方法。

我见过很多例子,有很多'不,你错过了什么'评论.匹配电子邮件地址的正确方法是什么?

出于Sanity的缘故,只有完全限定的域名,不允许使用@localhost.(或两种方式)

必须允许子域名(issac@deptartment.company.museum)



1> CMS..:

这个正则表达式符合RFC 2822中描述的语法,它很长,但RFC中描述的语法很复杂......



2> porges..:

纯正的正则表达式是不可能的.Regexen无法匹配嵌套括号,完整的RFC规范要求.(关于此事的最新RFC是RFC5322,仅在几个月前发布.)

对电子邮件地址的完全验证需要一些与CFG相关的内容,还有一些事情要警惕; 例如,电子邮件地址可以包含'\0'空字符...因此您不能在它们上使用任何C的普通字符串函数.

我实际上感觉有点奇怪回答一个问题,并附有我写的东西的链接,但事实上,我有一个我之前准备的:一个简短的(据我所知)完全兼容的验证器,在Haskell ; 你可以在这里看到源代码.我想这些代码可以很容易地移植到任何类似的解析库(也许是C++的Boost.Spirit),或者很容易从另一种语言中挂钩(Haskell有一种非常简单的方式让C使用Haskell代码,所有东西都可以使用C绑定...)

源代码中也有大量的测试用例(我没有从模块中导出它们),这是由于Dominic Sayers,他在PHP中拥有自己的RFC兼容解析器版本.(有几个测试失败了,但它们比RFC5322指定的更严格,所以我现在很好.)



3> Sherm Pendle..:

这是几周前在这里提出来的.它归结为,有许多合法地址,容易正则表达式不匹配.它需要一个真正疯狂的正则表达式来匹配大多数合法地址.即便如此,语法合法的地址并不能保证其背后存在帐户 - 例如,请使用foo@example.invalid.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有