什么是全球公认的正则表达式来匹配e

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

为了理智,只有完全合格的域名,不允许使用@localhost。 (或者两种方式)

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


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


在纯正则表达式中这是不可能的。 Regexen无法匹配满足RFC规范要求的嵌套括号。 (关于这个问题的最新RFC是RFC5322,几个月前才发布。)

对电子邮件地址的全面验证需要遵循CFG的规定,还有一些需要注意的事项; 例如,电子邮件地址可以包含'' ,空字符......所以你不能使用任何C的普通字符串函数。

我真的感到有点奇怪,回答了我写的东西的链接问题,但是正如我刚才所做的那样,我有一个问题:在Haskell中一个简短的(据我所知)完全兼容的验证器; 你可以在这里看到源代码。 我想代码可以很容易地移植到任何类似的解析库(也许是C ++的Boost.Spirit),或者很容易地从另一种语言中钩起来(Haskell有一个非常简单的方法来让C使用Haskell代码,并且所有东西都可以使用C绑定...)

源代码中还有大量的测试用例(我没有从模块中导出它们),这是由于Dominic Sayers在PHP中有自己版本的RFC兼容解析器。 (有些测试失败了,但是它们比RFC5322更加严格,所以我现在没有问题。)


几星期前在这里被问到。 它所涉及的是,有许多合法的地址,简单的正则表达式不匹配。 它需要一个真正疯狂的正则表达式来匹配大多数合法地址。 即使如此,语法上合法的地址也不能保证它背后的帐户存在 - 例如,使用foo@example.invalid。

链接地址: http://www.djcxy.com/p/16547.html

上一篇: What would be a globally accepted regular expression to match e

下一篇: Validating email addresses using jQuery and regex