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);

...しかし、.match メソッドをサポートするには文字列でなければならないため、これは機能しません。

4

5 に答える 5

22

2 つの異なる正規表現コンストラクターを混在させています。一つを選ぶ:

 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()コンストラクターを使用する場合、/区切り文字は式でリテラルとして扱われるため、含めないでください。

^$また、9 桁以外の文字が含まれないように式を固定する必要があります。

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 に答える