我正在查看电子邮件验证。我在RFC规范中读到,不允许连续。(点),例如 mail..me @ server.com 。
但是允许连续出现不同的狂野角色吗?比如, mail.$me@server.com 。
如果是这样,我如何制作一个正则表达式,只要它们不同,它们只会出现一次狂野字符?它不应接受.. && $$
之类的内容,而应接受&$ .$ &.
由于允许使用大量野性字符,我不认为像\^(&&|$$|..)\
这样的正则表达式不是一种选择。
答案 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
请记住,如前所述:判断电子邮件地址是否真正有效的唯一方法是向其发送电子邮件!