2011-07-04 15 views
2

我试图用Javascript中的字符串来匹配电子邮件正则表达式\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b。目前我正在使用代码email.match(/b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}/),但它不匹配任何电子邮件地址。在Javascript中使用正则表达式的前需要进行更改吗?你如何在JavaScript中匹配正则表达式?

+4

顶级域名验证电子邮件的详细信息并不限定于由他们2-4字母... – Quentin

+0

@Quentin - 如.museum –

+3

对于这个问题,[他们不限于拉丁脚本](http://news.cnet.com/8301-1023_3-20004429-93.html)或者 – Quentin

回答

5

问题匹配的电子邮件地址与正则表达式的旁白:

您必须添加不区分大小写的修改因为你只匹配大写字符。你还缺少\b前(这使得表达式匹配b字面意思)和\b末(感谢@Tomalak)(即使它的“工作”没有它):

email.match(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i) 

如果你只是想知道的表达是否匹配,你可以使用.test

patter.test(email) 

More about regular expressions in JavaScript

+1

最后是'\ b'。我认为OP在添加分隔符时会产生误解。 –

+0

[This](http://www.regular-expressions.info/email.html)似乎是正则表达式的来源,是的,它应该是不区分大小写的,并且有一个'\ b'结束。优秀的文章。 –

0

您应该使用符合RFC 2822的RegEx验证电子邮件,即使它很大;

function check_mail(str){ 
    var reg=new RegExp(/(?:[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])+)\])/i) 

    if(str.match(reg)){ 
    return true; 
    }else{ 
    return false; 
    } 
} 

有关使用RegExs看到regular-expression.info

+1

不,不,我虚心不同意。有真实的地址不符合RFC。另外你不知道一个有效的格式是否真的是一封真正的电子邮件,所以有什么意义。只是为了检查“@”字符作为基本的完整性检查,更容易和更易于维护。 –

+0

的确,这一切都取决于你在找什么:测试一个真正的电子邮件意味着发送一封邮件给地址。如果你需要一个非常快速的测试,测试格式可以限制为“@”。我使用我的解决方案作为一个平均值。 –