我有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);
}
答案 0 :(得分:3)
这就是你需要的:
function isUserIdValid(user_id) {
var patt = new RegExp('[^a-z0-9_]', 'ig');
return patt.test(user_id);
}
答案 1 :(得分:1)
问题是您使用的是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);
答案 2 :(得分:0)
这样的事情应该有效:
var patt = new RegExp(/^[0-9]+$/, "ig");
答案 3 :(得分:0)
function isUserIdValid(user_id) {
var patt = new RegExp(/^[a-z0-9]+$/i);
return patt.test(user_id);
}
答案 4 :(得分:0)
您应该使用testUserIds
声明var
,以便它是本地变量,而不是全局变量。
function foo() {
var testUserIds = ['id23425860',
'yulka_rdtska',
'im?sel=2000000001',
'im?sel=2000000002'];
// rest of your code
}
同样要声明一个正则表达式,你可以用更简洁的斜杠包装表达式,如下所示:
var patt = /[^a-z]/ig;
有点偏离主题,但我无法指出。