2012-07-30 45 views
1

我试过下面的代码,但它给了我不匹配。检查正则表达式或其他方式的电子邮件字符串

re:run("[email protected]", "\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b"). 

正则表达式我来到这里http://www.regular-expressions.info/email.html

编辑: 下不工作,以

re:run("345345", "\b[0-9]+\b"). 

如果你们有连接字符串的电子邮件时一个将匹配

re:run("[email protected]", "^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$"). 

回答

0

看起来你需要不区分大小写匹配?

目前[A-Z0-9._%+-](例如)仅匹配大写字符(加数字等)。

一种解决方案是指定[A-Za-z]。另一种解决方案是在匹配之前将您的电子邮件地址转换为大写字母。

+0

'' 重新:运行( “[email protected]”,“\ B [A-ZA-Z0-9 ._%+ - ] + @ [A-ZA-Z0-9 .-] + \。 [A-Za-z] {2,4} \ b“)。'' - 给我不匹配(( – Yola 2012-07-30 10:06:05

5

我毫不犹豫地回答这个问题,因为我相信它依赖于一个不正确的假设 - 你能确定的电子邮件地址是否有效或不使用正则表达式。有关更多详情,请参阅this question;从短暂的一瞥我会注意到,在你的问题的正则表达式不接受.museum.рф顶级域名。

这就是说,你需要避开反斜杠。你希望字符串包含反斜杠,但是在Erlang中,反斜线用于字符串内部以便转义各种字符,所以任何文字反斜杠都需要写为\\。试试这个:

3> re:run("[email protected]", "\\b[a-z0-9._%+-][email protected][a-z0-9.-]+\\.[a-z]{2,4}\\b"). 
{match,[{0,9}]} 

甚至更​​好,这一点:

8> re:run("[email protected]", "\\b[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*\\b"). 
{match,[{0,9}]} 

这是正则表达式used in the HTML 5 standard,修改为使用\\b而不是^$

+2

+1),但你仍应该扩展这个以允许例如'='在localpart中,并且注意任何使用正则表达式在失败的情况下会失败,在域名部分添加'-'至少可以允许国际化域名的punycode表示(当然,你应该完全放弃长度限制)。此外,你应该允许任意深度的子域名 - - 许多ccTLD甚至不允许只有两个部分的域名 – tripleee 2012-07-30 16:11:55

+0

好点,我从一个有信誉的来源添加了一个正则表达式。 – legoscia 2012-07-30 17:45:32

相关问题