问题是您使用的是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);