我有id的验证方法,每个id只能包含[a-z0-9_]不区分大小写的字符。[^a-z]似乎起作用了,但我想附加[^0-9],但这不起作用。一个字符串模式应该是什么样子的?
function foo() {
testUserIds = ['id23425860',
'yulka_rdtska',
'im?sel=2000000001',
'im?sel=2000000002'];
for (id in testUserIds) {
document.write(isUserIdValid(id) + '\r\n');
}
}
function isUserIdValid(user_id) {
var patt = new RegExp('[^a-z]', 'ig');
return patt.test(user_id);
}发布于 2012-05-08 04:27:18
问题是您使用的是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);发布于 2012-05-08 04:23:39
这就是你所需要的:
function isUserIdValid(user_id) {
var patt = new RegExp('[^a-z0-9_]', 'ig');
return patt.test(user_id);
}发布于 2012-05-08 04:26:00
像这样的东西应该是有效的:
var patt = new RegExp(/^[0-9]+$/, "ig");https://stackoverflow.com/questions/10488564
复制相似问题