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 相关文章推荐
Google Suggest ;-) 基于js的动态下拉菜单
Oct 11 Javascript
javascript之解决IE下不渲染的bug
Jun 29 Javascript
javascript new fun的执行过程
Aug 05 Javascript
深入理解javascript作用域和闭包
Sep 23 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
jquery插件bxslider用法实例分析
Apr 16 Javascript
Javascript编写2048小游戏
Jul 07 Javascript
vue实现ToDoList简单实例
Feb 07 Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
node.js命令行教程图文详解
May 27 Javascript
Javascript如何实现扩充基本类型
Aug 26 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
Python算术运算符实例详解
2017/05/31 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
工程预算与管理应届生求职信
2013/10/06 职场文书
应聘自荐书
2013/10/08 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
清洁工岗位职责
2015/02/13 职场文书
员工升职自荐信
2015/03/27 职场文书
交流会主持词
2015/07/02 职场文书
病房管理制度范本
2015/08/06 职场文书
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android