首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何应用[^0-9] regex模式javascript

如何应用[^0-9] regex模式javascript
EN

Stack Overflow用户
提问于 2012-05-08 04:20:47
回答 5查看 3.7K关注 0票数 2

我有id的验证方法,每个id只能包含[a-z0-9_]不区分大小写的字符。[^a-z]似乎起作用了,但我想附加[^0-9],但这不起作用。一个字符串模式应该是什么样子的?

代码语言:javascript
复制
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);
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-08 04:27:18

问题是您使用的是for-in结构,而不是正确的for循环。使用[^a-z0-9_]作为您的正则表达式,并正确迭代您的数组。

在JavaScript中,不要使用for (elem in arr)遍历数组,因为语法目的是遍历对象的属性。请改用for (var idx=0; idx<something; idx++)

代码语言:javascript
复制
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

请注意,按照您设置函数的方式,它返回的结果与它所说的相反。您正在检查无效字符,因此返回倒置的:

代码语言:javascript
复制
// If it matched, it's invalid, otherwise valid
return !patt.test(user_id);
票数 1
EN

Stack Overflow用户

发布于 2012-05-08 04:23:39

这就是你所需要的:

代码语言:javascript
复制
function isUserIdValid(user_id) {
  var patt = new RegExp('[^a-z0-9_]', 'ig');
  return patt.test(user_id);
}
票数 3
EN

Stack Overflow用户

发布于 2012-05-08 04:26:00

像这样的东西应该是有效的:

代码语言:javascript
复制
var patt = new RegExp(/^[0-9]+$/, "ig");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10488564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档