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 相关文章推荐
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
Sep 22 Javascript
JavaScript中document对象使用详解
Jan 06 Javascript
js实现界面向原生界面发消息并跳转功能
Nov 22 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
Feb 08 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
基于JavaScript实现弹幕特效
Aug 27 Javascript
浅谈Angular 的变化检测的方法
Mar 01 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
Jun 03 Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 Javascript
用JS实现一个简单的打砖块游戏
Dec 11 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 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 高手之路(三)
2006/10/09 PHP
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
javascript 禁止复制网页
2009/06/11 Javascript
javascript 写类方式之四
2009/07/05 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
js严格模式总结(分享)
2016/08/22 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
保洁主管岗位职责
2013/11/20 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
个人承诺书格式
2014/06/03 职场文书
小学教育见习总结
2015/06/23 职场文书
python随机打印成绩排名表
2021/06/23 Python
mysql 获取相邻数据项
2022/05/11 MySQL