1

次のような値を返す配列があります。

//Eg 1    [ [ "214323", "34243" ], [ "3333", "123" ] ]

//Eg 2    [ [ "214323" ],[ "3333" ] ]

配列がスペースやnullのない数値のみを保持しているかどうかを検証したいのですが、そうでない場合はエラーをスローしたいと思います。これは私の次のコードであり、上記の例では機能しません。すべての値が数値であっても、エラーがスローされます。

for (var i = 0; i <= arrayVals.length; i++) {
    if(!(/^\d+$/.test(arrayVals[i]))) {
        err_comp=true;

        }   
}

if( err_comp ==true) {
        alert( 'The value has to be only numeric.');
} 
4

3 に答える 3

2

<=0から始めるため、使用しないでください。使用する必要があります<

for (var i = 0; i < arrayVals.length;
于 2012-08-27T21:47:05.890 に答える
2

配列の配列があるため、 2つのループが必要です。

var err_comp = false;
for (var i = 0; i < arrayVals.length; i++) {
  var arr = arrayVals[i];
  for (var j = 0; j < arr.length; j++) {
    if (!(/^\d+$/.test(arr[j]))) {
        err_comp = true;
    }   
  }
}

それ以外の場合は、テストすることになります/^\d+$/.test([ "214323", "34243" ])

于 2012-08-27T21:48:48.343 に答える
1
multi_arr.every(function(arr) {
    return arr.every(function(n) {
        return /^\d+$/.test(n);
    });
});

必要に応じてテストを変更でき、必要に応じ.everyてIE8のパッチを追加できます。

そして、あなたはあなたの機能を再利用可能にすることができます。

function forEveryArray(fn) {
    return function every_array(arr) {
        return arr.every(fn)
    }
}

function isNumber(n) { return /^\d+$/.test(n); }


multi_arr.every(forEveryArray(isNumber));
于 2012-08-27T21:53:45.537 に答える