8

我正在尝试验证一个变量是否包含 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);

...但这不起作用,因为它必须是 String 才能支持 .match 方法。

4

5 回答 5

22

您正在混合两种不同的正则表达式构造函数。选一个:

 var pattern = new RegExp("^\\d{9}$");
 // or
 var pattern = /^\d{9}$/;

注意,您可能想要添加开始和结束锚点(如上)以确保整个字符串匹配。

于 2012-08-16T13:43:01.517 回答
7

您正在将正则表达式文字语法与 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}$/;
于 2012-08-16T13:42:23.640 回答
5

使用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}$/;
于 2012-08-16T13:43:05.820 回答
2

您不是在寻找 9 个连续数字,而是在寻找 9 个用斜杠括起来的连续数字。

于 2012-08-16T13:43:00.407 回答
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!');
}
于 2012-08-16T13:44:50.827 回答