js动态拼接正则表达式的两种方法

 更新时间:2014年03月04日 11:40:17   作者:  
这篇文章主要介绍了js动态拼接正则表达式的两种方法,需要的朋友可以参考下
方法一:

做项目的时候可能会遇到用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布尔运算符原理使用解析

    这篇文章主要介绍了JavaScript布尔运算符原理使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 基于Bootstrap模态对话框只加载一次 remote 数据的解决方法

    基于Bootstrap模态对话框只加载一次 remote 数据的解决方法

    下面小编就为大家带来一篇基于Bootstrap模态对话框只加载一次 remote 数据的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 解决css和js的{}与smarty定界符冲突问题的两种方法

    解决css和js的{}与smarty定界符冲突问题的两种方法

    当输入url地址后网页出现如下文所描述的问题通常是css和js的{}与smarty定界符冲突导致的,解决方法有两个,具体如下,感兴趣的朋友可以参考下
    2013-09-09
  • javascript实现查询商品功能

    javascript实现查询商品功能

    这篇文章主要为大家详细介绍了javascript实现查询商品功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • ES6 Object.assign()的用法及其使用

    ES6 Object.assign()的用法及其使用

    这篇文章主要介绍了ES6 Object.assign()的用法及其使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • JavaScript 获取 URL 中参数值的方法

    JavaScript 获取 URL 中参数值的方法

    本文将详细介绍几种在 JavaScript 中获取 URL 参数值的方法,包括现代浏览器支持的 URLSearchParams、正则表达式解析以及自定义函数解析方案,并讨论各自的优缺点及适用场景,感兴趣的朋友一起看看吧
    2025-04-04
  • JS 实现导航栏悬停效果(续2)

    JS 实现导航栏悬停效果(续2)

    发现原来的方法还有是有几个问题:首先Js代码冗余,导航条上的Tab是用js实现跳转而不是超链接,还有导航条本身用fixed定位,但没有被设置为水平居中,而是在JS中更改left值使其居中
    2013-09-09
  • table insertRow、deleteRow定义和用法总结

    table insertRow、deleteRow定义和用法总结

    这篇文章主要对table insertRow、deleteRow定义和用法做下总结,需要的朋友可以参考下
    2014-05-05
  • 深入探讨JavaScript中Class的语法与使用

    深入探讨JavaScript中Class的语法与使用

    这篇文章将带大家深入探讨 class 在 JavaScript 中的作用、语法和使用方法,并与 ES5 构造函数进行对比,希望可以帮助大家更好地理解和应用类的概念
    2023-06-06
  • JavaScript检测并限制复选框选中个数的方法

    JavaScript检测并限制复选框选中个数的方法

    这篇文章主要介绍了JavaScript检测并限制复选框选中个数的方法,涉及javascript针对复选框的判定与运算相关技巧,非常简单实用,需要的朋友可以参考下
    2015-08-08

最新评论