我有这个功能
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;
}
}
我想动态插入最小长度和最大长度, 但是如果使用上面的代码,它会给我错误的是它是否应该接受字符串为真。
任何人都可以告诉我,我应该使用什么而不是“+变量+”来动态插入值。
提前致谢。
答案 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)
}