2

我有 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);
}
4

5 回答 5

3

这就是你需要的:

function isUserIdValid(user_id) {
  var patt = new RegExp('[^a-z0-9_]', 'ig');
  return patt.test(user_id);
}
于 2012-05-07T20:23:39.033 回答
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);
于 2012-05-07T20:27:18.247 回答
0

像这样的东西应该工作:

var patt = new RegExp(/^[0-9]+$/, "ig");
于 2012-05-07T20:26:00.277 回答
0
function isUserIdValid(user_id) {
    var patt = new RegExp(/^[a-z0-9]+$/i);
    return patt.test(user_id);
}
于 2012-05-07T20:30:43.640 回答
0

你应该声明它testUserIdsvar一个局部变量,而不是一个全局变量。

function foo() {
  var testUserIds = ['id23425860', 
  'yulka_rdtska',
  'im?sel=2000000001',
  'im?sel=2000000002'];

  // rest of your code
}

此外,要声明一个正则表达式,您可以用更简洁的斜杠将表达式包装起来,如下所示:

var patt = /[^a-z]/ig;

有点离题,但我忍不住指出。

于 2012-05-08T02:31:43.087 回答