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 相关文章推荐
js 单引号 传递方法
Jun 22 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
js通过iframe加载外部网页的实现代码
Apr 05 Javascript
Javascript中For In语句用法实例
May 14 Javascript
原生js实现tab选项卡切换
Mar 23 Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 Javascript
前端Electron新手入门教程详解
Jun 21 Javascript
js图片无缝滚动插件使用详解
May 26 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
Aug 27 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
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)
2006/10/09 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
seajs学习教程之基础篇
2016/10/20 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技