2

わかりました、UUID コードを受け取る複数の入力があります。そのため、jQuery の .each 関数を使用して 1 つずつ移動し、入力が UUID コードであることを検証します。だから、これは私が今まで持っているコードです:

function validateAll(){
    var regex = /^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$/ig;
    $('input.offer').each(function(x){
        if($(this).val() !== ""){
            console.log(x+" - "+$(this).val()+" - "+regex.test($(this).val()));
        }
    });
    return true;
}

00000000-0000-0000-0000-000000000000 という 2 つの入力でこれを実行すると、コンソールに次のように表示されます。

0 - 00000000-0000-0000-0000-000000000000 - 真

1 - 00000000-0000-0000-0000-000000000000 - false

regex.test() が最初のものを検証しているのに、2 番目のものを検証していないのはなぜですか? ありがとう。

4

2 に答える 2

4

ループ内で正規表現のインスタンス化を行う必要があります。別の文字列に対して再テストすることはできません。

function validateAll(){
    $('input.offer').each(function(x) {
        var regex = /^[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}$/ig;
        if($(this).val() !== ""){
            console.log(x + " - " + $(this).val() + " - " + regex.test($(this).val()));
        }
    });
    return true;
}

フィドルの例

2 回目の反復が失敗する理由:

[正規表現] がグローバル正規表現の場合。前の文字列の最後の一致のインデックスから一致を試みます。

記事:正規表現オブジェクトを再利用するときは注意してください

于 2013-10-10T15:03:48.127 に答える