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实现的图片马赛克后显示并切换加文字功能
Apr 21 Javascript
js文件中调用js的实现方法小结
Oct 23 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
javascript实现下雨效果
Mar 27 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
bootstrap手风琴折叠示例代码分享
May 22 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
Mar 08 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
Python序列之list和tuple常用方法以及注意事项
2015/01/09 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python语言是免费还是收费的?
2020/06/15 Python
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
纪念建党演讲稿范文
2014/01/13 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
单位委托书格式范本
2014/09/29 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
Flink 侧流输出源码示例解析
2022/09/23 Servers