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


Posted in Javascript onMarch 04, 2014

方法一:

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

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

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

下面贴出上例的通用解决方案:

/** 
* 验证月份表单输入是否合法 
* pattern : 月份格式字符串 
* id : 表单id 
*/ 
function validateMonth(pattern, id) { 
var text = document.getElementById(id); 
var monthStr = text.value; 
var splitChar = ""; 
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2); 
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;"); 
//var re = /\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(); 
return false; 
} 
return true; 
}

/** 
* 验证月份表单输入是否合法 
* pattern : 月份格式字符串 
* id : 表单id 
*/ 
function validateMonth(pattern, id) { 
var text = document.getElementById(id); 
var monthStr = text.value; 
var splitChar = ""; 
if(pattern.length > 6) splitChar = pattern.substring(4, pattern.length - 2); 
eval("var re = /\\d{4}" + splitChar + "\\d{2}$/;"); 
//var re = /\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(); 
return false; 
} 
return true; 
}

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

方法二:

<script> 
var n=new Array( ".htm ", ".html ", ".shtml "); 
//var pattern1 = new RegExp( "\\w+\\ "+n[0]+ "$ ", "gi "); 
var s1= "b.shtml "; 
var result = false; 
for(var i=0;i <n.length;i++) 
{ 
pattern1 = new RegExp( "\\w+\\ "+n[i]+ "$ ", "gi "); 
result|=pattern1.test(s1); 
} 
alert(Boolean(result)); 
</script>
Javascript 相关文章推荐
打开超链需要“确认”对话框的方法
Mar 08 Javascript
JavaScript加密解密7种方法总结分析
Oct 07 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
Mar 01 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
Feb 02 Javascript
JS实现清除指定cookies的方法
Sep 20 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
Dec 21 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
D3.js实现简洁实用的动态仪表盘的示例
Apr 04 Javascript
Vue Element 分组+多选+可搜索Select选择器实现示例
Jul 23 Javascript
看看“疫苗查询”小程序有温度的代码
Jul 31 Javascript
基于vue和websocket的多人在线聊天室
Feb 01 Javascript
VUE中使用HTTP库Axios方法详解
Feb 05 Javascript
8个实用的jQuery技巧
Mar 04 #Javascript
js中top的作用深入剖析
Mar 04 #Javascript
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 #Javascript
深入理解JS中的变量及作用域、undefined与null
Mar 04 #Javascript
css+js实现部分区域高亮可编辑遮罩层
Mar 04 #Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 #Javascript
js判断url是否有效的两种方法
Mar 04 #Javascript
You might like
多php服务器实现多session并发运行
2006/10/09 PHP
PHP 替换模板变量实现步骤
2009/08/24 PHP
php之Memcache学习笔记
2013/06/17 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
3种python调用其他脚本的方法
2020/01/06 Python
tensorflow自定义激活函数实例
2020/02/04 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
浅析Python requests 模块
2020/10/09 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
Java面向对象面试题
2016/12/26 面试题
计算机专业毕业生自我鉴定
2014/01/16 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
新年晚会主持词
2014/03/24 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
标准毕业生自荐信
2014/06/24 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
会计人员岗位职责
2015/02/03 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
早恋主题班会
2015/08/14 职场文书