如何应用[^ 0-9]正则表达式模式javascript

时间:2012-05-07 20:20:47

标签: javascript regex

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

5 个答案:

答案 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;

有点偏离主题,但我无法指出。