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 相关文章推荐
Javascript结合css实现网页换肤功能
Nov 02 Javascript
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
js处理表格对table进行修饰
May 26 Javascript
jQuery Mobile中的button按钮组件基础使用教程
May 23 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
Jan 03 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
ionic3 懒加载
Aug 16 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
JavaScript实现滑动门效果
Jan 18 Javascript
node crawler如何添加promise支持
Feb 01 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 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
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP _construct()函数讲解
2019/02/03 PHP
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
js如何验证密码强度
2020/03/18 Javascript
python新手经常遇到的17个错误分析
2014/07/30 Python
python调用fortran模块
2016/04/08 Python
python实现BackPropagation算法
2017/12/14 Python
python实现一个简单的ping工具方法
2019/01/31 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Django实现网页分页功能
2019/10/31 Python
python如何实时获取tcpdump输出
2020/09/16 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
捐款倡议书范文
2014/02/02 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python