我正在尝试在Javascript中验证包含9位数字的变量。这应该是基本的,但由于某种原因,这是失败的:
var test = "123123123";
var pattern = new RegExp("/\d{9}/");
if(test.match(pattern))
{
//This code never executes
}
else
{
//This code is always executing
alert('no match!');
}
谁能明白为什么我没有得到一场比赛?
我还尝试使用以下整数进行类型转换测试:
test = Number(test);
...但这不起作用,因为它必须是一个支持.match方法的String。
答案 0 :(得分:12)
你正在混合two different regex constructors。选择一个:
var pattern = new RegExp("^\\d{9}$");
// or
var pattern = /^\d{9}$/;
N.B。您可能想要添加开始和结束锚点(如上所述),以确保整个字符串匹配。
答案 1 :(得分:5)
您正在将regex literal syntax与RegExp类混合使用。尝试:
var test = "123123123";
var pattern = /\d{9}/;
if(test.match(pattern))
{
alert('match!');
//This code never executes
}
else
{
//This code is always executing
alert('no match!');
}
此外,如果要确保它包含仅 9位数字,您可能希望更改正则表达式以匹配行的开头和结尾。现在,正则表达式将匹配包含9位数字的任何字符串。你会改变它:
var pattern = /^\d{9}$/;
答案 2 :(得分:2)
您正在寻找9个连续数字,您正在寻找以斜杠包围的9个连续数字。
答案 3 :(得分:2)
使用new Regexp()
构造函数时,不应包含/
分隔符,因为它们在表达式中被视为文字。
此外,您的表达式应该锚定^$
,以确保它不包含除九位数之外的其他字符。
var test = "123123123";
// \d would need to be escaped as \\d in RegExp()
var pattern = new RegExp("^\\d{9}$");
// ..Or...
var pattern = new RegExp("^[0-9]{9}$");
如果你不需要在正则表达式中进行字符串操作或包含变量,那么使用不带new Regexp()
的正则表达式文字通常是更好的策略,因为它避免了额外的反斜杠转义。
var pattern = /^\d{9}$/;
答案 4 :(得分:1)
尝试删除斜杠并转义反斜杠:
var test = "123123123";
var pattern = new RegExp("\\d{9}");
if(test.match(pattern))
{
//This code never executes
alert("match");
}
else
{
//This code is always executing
alert('no match!');
}