动态插入在正则表达式中不起作用

时间:2014-01-21 09:45:38

标签: javascript regex

我有这个功能

function validateUsername(str,minL,maxL){// i'm passing validateUsername("asdf_1",2,8)
var exp=new RegExp(/^[a-z0-9_-]\w{"+minL+","+maxL+"}$/);
switch(exp.test(str)){
    case true: return true;
    case false: return false;
  }
}

我想动态插入最小长度和最大长度, 但是如果使用上面的代码,它会给我错误的是它是否应该接受字符串为真。

任何人都可以告诉我,我应该使用什么而不是“+变量+”来动态插入值。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用regex object constructor根据所述here的字符串构建正则表达式。

取自关联答案的例子:

var re = new RegExp("a|b", "i");
// same as
var re = /a|b/i;

在你的情况下会做类似的事情:

function validateUsername(str,minL,maxL){// i'm passing validateUsername("asdf_1",2,8)
  var exp=new RegExp("^[a-z0-9_-]\w{" + minL + "," + maxL + "}$");
  /*
  why ???
  switch(exp.test(str)){
    case true: return true;
    case false: return false;
  }
  */
  return exp.test(str);
}

答案 1 :(得分:0)

您可以将长度验证与模式分开,类似这样

if(str.length<minL || str.length>maxL){
// invalid length
}else{
var exp=new RegExp(/^[a-z0-9_-]\w$/);
 return exp.test(str)
}