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

Javascript 动态插入在正则表达式中不起作用,javascript,regex,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; } } 我想动态插入最小长度和

我有这个功能

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;
  }
}
我想动态插入最小长度和最大长度, 但是如果使用上面的代码,它会告诉我它是否应该接受字符串为true

有人能告诉我,我应该使用“+变量+”来动态插入值吗

提前感谢。

您可以使用从所述字符串构建正则表达式

示例摘自链接答案:

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

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

if(str.length<minL || str.length>maxL){
// invalid length
}else{
var exp=new RegExp(/^[a-z0-9_-]\w$/);
 return exp.test(str)
}
if(str.lengthmaxL){
//无效长度
}否则{
var exp=新的RegExp(/^[a-z0-9_-]\w$/);
返回exp.test(str)
}

这将导致结果为false,{required,required}在我的情况下,否则输出为false。我不是在检查长度,我想在正则表达式中插入动态最小和最大长度。@k102-dude,我问,在返回的情况下,我应该使用什么才能使我的答案为true。此函数用于密码验证。我知道这是一个小问题,但我的问题不同。