电子邮件中连续的狂野角色

时间:2009-09-09 07:00:33

标签: regex email-validation wildcard

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

但是允许连续出现不同的狂野角色吗?比如, mail.$me@server.com

如果是这样,我如何制作一个正则表达式,只要它们不同,它们只会出现一次狂野字符?它不应接受.. && $$之类的内容,而应接受&$ .$ &.

之类的内容

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

6 个答案:

答案 0 :(得分: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

答案 1 :(得分: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}$/

不漂亮:) 但非常符合我的规格。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我认为这取决于您使用此电子邮件验证所做的事情,但我已经在在线ASP.NET正则表达式验证程序中进行了多年的表单输入。

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

我从困难的方式中吸取了教训,最好是在贪婪方面犯错,而不是试图过于严格。换句话说,由于在定义使电子邮件地址有效(和无效)的内容方面有很多规则,我只需定义一个松散的开放式正则表达式来覆盖我的所有基础。它也可能匹配一些无效的电子邮件地址,但就我的目的而言,这并不是一件大事。此外,老实说 - 大部分时间如果用户搞砸了他们的电子邮件地址,这将是一个拼写错误,正则表达式无论如何都不会被捕获。

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

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

这是一个测试这个的实例:

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

这并不能解决您的主要问题,因为这仍然会匹配连续的点,短划线等。我仍然无法声称这将匹配每个有效的电子邮件地址,因为我老实说不知道。但我可以说,过去3年来我一直在使用它,用户超过25,000,而且没有一个投诉。

答案 4 :(得分:0)

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

答案 5 :(得分: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

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