zl程序教程

您现在的位置是:首页 >  后端

当前栏目

js动态拼接正则表达式的两种方法

JS方法正则表达式 动态 两种 拼接
2023-06-13 09:15:19 时间
方法一:

做项目的时候可能会遇到用js验证表单输入正确性的需求,这时候就需要用到js的正则表达式。举个例子:比如说要验证月份,格式为:"yyyy-MM",这个正则表达式写起来很简单,实在写不出,也可以Google、百度一把,网上例子一大堆!但是js正则表达式就这样写死也会带来新的问题:如果配置文件的月份格式改了呢?改成"yyyyMM"、或者是"yyyy_MM"...呢??我们是不是要记得去把js中的正则表达式也跟着一遍遍的改呢??

这时候我们就要问了:怎样才能写出动态的正则表达式呢,修改了配置文件,就不需要再去动代码了呢?

笔者翻阅了js手册,没有找到将字符串转换成正则表达式的方法,但是可以用eval();方法动态执行脚本的方式间接解决这个问题!从而写出更加通用的代码!

下面贴出上例的通用解决方案:
复制代码代码如下:

/**
*验证月份表单输入是否合法
*pattern:月份格式字符串
*id:表单id
*/
functionvalidateMonth(pattern,id){
vartext=document.getElementById(id);
varmonthStr=text.value;
varsplitChar="";
if(pattern.length>6)splitChar=pattern.substring(4,pattern.length-2);
eval("varre=/\\d{4}"+splitChar+"\\d{2}$/;");
//varre=/\d{4}-\d{2}$/;
if(monthStr.match(re)==null){
alert("请参考格式["+pattern+"]输入!\n"+"e.g\"2010"+splitChar+"11\"or\"2010"+splitChar+"03\"");
text.value="";
text.focus();
returnfalse;
}
returntrue;
}

复制代码代码如下:

/**
*验证月份表单输入是否合法
*pattern:月份格式字符串
*id:表单id
*/
functionvalidateMonth(pattern,id){
vartext=document.getElementById(id);
varmonthStr=text.value;
varsplitChar="";
if(pattern.length>6)splitChar=pattern.substring(4,pattern.length-2);
eval("varre=/\\d{4}"+splitChar+"\\d{2}$/;");
//varre=/\d{4}-\d{2}$/;
if(monthStr.match(re)==null){
alert("请参考格式["+pattern+"]输入!\n"+"e.g\"2010"+splitChar+"11\"or\"2010"+splitChar+"03\"");
text.value="";
text.focus();
returnfalse;
}
returntrue;
}

有一点值得注意:动态拼出脚本字符串传给eval()方法执行时,需要对字符"\"转义

方法二:
复制代码代码如下:
<script>
varn=newArray(".htm",".html",".shtml");
//varpattern1=newRegExp("\\w+\\"+n[0]+"$","gi");
vars1="b.shtml";
varresult=false;
for(vari=0;i<n.length;i++)
{
pattern1=newRegExp("\\w+\\"+n[i]+"$","gi");
result|=pattern1.test(s1);
}
alert(Boolean(result));
</script>