問題は、適切なループfor-in
の代わりに構造を使用していることです。正規表現としてfor
使用し、配列を正しく反復処理します。[^a-z0-9_]
JavaScript では、 を使用して配列を反復処理しないでください。for (elem in arr)
その構文の目的は、オブジェクトのプロパティを反復処理することです。代わりに を使用しますfor (var idx=0; idx<something; idx++)
。
function foo() {
testUserIds = ['id23425860',
'yulka_rdtska',
'im?sel=2000000001',
'im?sel=2000000002'];
// Use an incremental for loop here, NOT a for-in
// for-in is intended for iterating over object properties, not arrays.
for (var i=0; i<testUserIds.length; i++) {
console.log(isUserIdValid(testUserIds[i]) + '\r\n');
}
}
function isUserIdValid(user_id) {
var patt = new RegExp('[^a-z0-9_]', 'ig');
// Return the inversion of this, so isUserValid() is true if the user is valid
return !patt.test(user_id);
}
foo();
// Outputs
true
true
false
false
関数をセットアップした方法では、それが言うことの反対を返すことに注意してください。無効な文字をチェックしているため、反転して返します。
// If it matched, it's invalid, otherwise valid
return !patt.test(user_id);