我在Javascript上有this正则表达式:
var myString="aaa@aaa.com";
var mailValidator = new RegExp("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
if (!mailValidator.test(myString))
{
alert("incorrect");
}
但不应警告aaa@aaa.com
“不正确”。
它应该为aaaaaa.com
返回“不正确”(例如)。
我哪里错了?
答案 0 :(得分:2)
当你从一个字符串创建一个正则表达式时,你必须考虑到这样一个事实,即解析器会在之前从字符串中去掉反斜杠,因为它有机会被解析为正则表达式。< / p>
因此,到RegExp()
构造函数开始工作时,所有\w
标记都已在字符串常量中更改为普通的“w”。您可以将反斜杠加倍,以便字符串解析只留下一个,或者您可以使用本机正则表达式常量语法。
答案 1 :(得分:1)
如果您do this:
,则有效var mailValidator = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
你的内容是你需要双重转义反斜杠,因为它们在一个字符串中,如"\\w+([-+.]\\w+)*...etc
Here's a link that explains it(在“如何使用JavaScript RegExp对象”部分中)。
答案 2 :(得分:1)
尝试var mailValidator = new RegExp("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");