1

我在看电子邮件验证。我在 RFC 规范中读到了连续的 . (点)是不允许的,例如mail..me@server.com

但是不同的通配符是否允许连续出现?比如mail.$me@server.com

如果是这样,我如何制作一个正则表达式,只要它们不同,它只会出现一次通配符?它不应该接受那些喜欢的.. && $$,而是接受那些喜欢的,&$ .$ &.

而且由于允许使用大量的通配符,我不认为像\^(&&|$$|..)\etc 这样的正则表达式不是一种选择。

4

6 回答 6

5

有一些符合 RFC 的电子邮件验证正则表达式。它们并不漂亮,实际上它们非常糟糕,跨越数百个字符。你真的不想创建一个,要么使用它,要么编写你可以理解和维护的常规代码。

这是符合 RFC 的正则表达式之一

(?:[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])+)\])

检查此链接以获取扩展信息和替代(更实用)正则表达式http://www.regular-expressions.info/email.html

于 2009-09-09T07:04:06.260 回答
2

我终于用了这样的东西:

/^([a-zA-Z0-9]+([\.\!\'\#\$\%\&\*\+\-\/\=\?\^\_\`\{\|\}\~]{0,1}))*[a-zA-Z0-9]+\@(([a-zA-Z0-9\-]+[\.]?[a-zA-Z0-9]+){0,2})[\.][a-zA-Z]{2,4}$/

不漂亮:) 但非常符合我的要求。

于 2010-11-16T12:58:54.967 回答
1

是的,允许连续多次出现像 $ 这样的不同字符。sam$$iam@example.com 是一个完全有效的电子邮件地址。

于 2009-09-09T07:07:09.123 回答
0

我想这取决于您使用此电子邮件验证所做的工作,但多年来我已经在在线 ASP.NET 正则表达式验证器中为表单输入目的进行了此操作。

几个月来,我认为我有一个非常酷的正则表达式来处理这个问题。我在网上找到了它,它似乎很受欢迎。然而,有几次我接到客户的电话,试图填写表单验证不喜欢他们的电子邮件地址的应用程序。谁知道有多少人有同样的问题但没有打电话。

我从惨痛的教训中吸取了教训,那就是宁可贪婪也不要过于严格。换句话说,由于在定义什么使电子邮件地址有效(和无效)方面有太多规则,我只需定义一个松散的开放式正则表达式来涵盖我的所有基础。它也可能匹配一些无效的电子邮件地址,但对我而言,这没什么大不了的。此外,老实说 - 大多数情况下,如果用户搞砸了他们的电子邮件地址,这将是一个拼写错误,而正则表达式无论如何都不会发现。

所以这就是我现在使用的:

^[^<>\s\@]+(\@[\w\-]+(\.[\w\-]+)+)$

这是一个测试这个的工作示例:

http://regexhero.net/tester/?id=b90d359f-0dda-4b2a-a9b7-286fc513cf40

这并不能解决您的主要问题,因为它仍然会匹配连续的点、破折号等。而且我仍然不能声称这将匹配每个有效的电子邮件地址,因为我真的不知道。但我可以说,在过去的 3 年里,我一直在使用它,有超过 25,000 名用户,而且没有任何投诉。

于 2009-09-09T13:34:12.317 回答
0

我会使用一个简单的电子邮件验证正则表达式 + 另一个检查双字符的正则表达式,例如 /[.&$]{2}/

于 2009-09-09T13:42:05.587 回答
0

请参阅以下答案:

stackoverflow.com/questions/997078/email-regular-expression

stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses

stackoverflow.com/questions/36261/test-expand-my-email-regex

请记住,如前所述:判断电子邮件地址是否真正有效的唯一方法是向其发送电子邮件!

于 2009-09-09T18:27:38.317 回答