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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 Javascript
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
jQuery的end()方法使用详解
Jul 15 Javascript
省市区三级联动下拉框菜单javascript版
Aug 11 Javascript
基于javascript实现listbox左右移动
Jan 29 Javascript
AngularJS教程之简单应用程序示例
Aug 16 Javascript
Javascript6中字符串的四个新用法分享
Sep 11 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
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调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php导出excel格式数据问题
2014/03/11 PHP
php里array_work用法实例分析
2015/07/13 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
php 常用的系统函数
2017/02/07 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
js类 from qq
2006/11/13 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
JQuery入门——移除绑定事件unbind方法概述及应用
2013/02/05 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
vue axios用法教程详解
2017/07/23 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
pandas中ix的使用详细讲解
2020/03/09 Python
什么是Python包的循环导入
2020/09/08 Python
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
实用求职信范文分享
2013/12/25 职场文书
美容师的职业规划书
2013/12/27 职场文书
关于是否需要写商业计划书
2014/02/07 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
锦旗赠语
2015/06/23 职场文书
放飞理想主题班会
2015/08/14 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
Elasticsearch 数据类型及管理
2022/04/19 Python