Javascript Regex - 9位数字

时间:2012-08-16 13:40:08

标签: javascript regex

我正在尝试在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。

5 个答案:

答案 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!');
}