2012-01-26 32 views
2

我有JavaScript的正则表达式this为什么这个特定的正则表达式在JavaScript中不起作用?

var myString="[email protected]"; 
var mailValidator = new RegExp("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); 
if (!mailValidator.test(myString)) 
{ 
    alert("incorrect"); 
} 

,但它不应该警惕 “不正确” 与[email protected]

它应该返回“不正确”aaaaaa.com而不是(例如)。

我在哪里错了?

+0

如果你想使用正则表达式验证电子邮件地址,使用[这一个,而不是(http://stackoverflow.com/questions/46155/validate-email-address-in -javascript)。 –

+0

[为什么这个JavaScript的正则表达式不起作用?]的可能重复(http://stackoverflow.com/questions/7427731/why-this-javascript-regex-doesnt-work) – Jerry

回答

1

它的工作原理,如果你do this

var mailValidator = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 

在你会发生什么事是你需要加倍逃避反斜杠,因为他们是在字符串中,像"\\w+([-+.]\\w+)*...etc

Here's a link that explains it(在“如何使用JavaScript RegExp对象“部分)。

2

当你创建一个字符串的正则表达式,你必须考虑到一个事实,即解析器会从字符串去掉反斜线之前,它必须被解析为一个正则表达式的机会。因此,在RegExp()构造函数开始工作之前,所有\w标记已被更改为字符串常量中的纯“w”。您可以将反斜杠加倍,以便字符串解析只保留一个,也可以使用本地正则表达式常量语法。

1

尝试var mailValidator = new RegExp("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");

相关问题