今天在项目过程中发现一个问题,在网上拷的一段验证日期的正则表达式在项目中不起作用,在很多在线测试正则表达式的网站上都做过测试,自己也读了正则代码,就是看出来有什么问题:
function checkInDate(inStrdate) {
var regex = new RegExp("^(?:(?:(\d{4}(-|\/)(?:(?:0?[1,3-9]|1[0-2])(-|\/)(?:29|30)|((?:0?[13578]|1[02])(-|\/)31)))|(\d{4}(-|\/)(?:0?[1-9]|1[0-2])(-|\/)(?:0?[1-9]|1\d|2[0-8]))|(((?:(\d\d(?:0[48]|[2468][048]|[13579][26]))|(?:0[48]00|[2468][048]00|[13579][26]00))(-|\/)0?2(-|\/)29))))$");
if (!regex.test(inStrdate)) {
return false;
}
return true;
}
通过网上四处漫无目的的找资料以后,终于在斯达克里面看到一条比较靠谱的解答
大概意思就是,在js中,正则表达式有两种用法,一种是使用正则变量的方法来匹配字符串,一种是用字符串的方法来匹配正则表达式。
我这边项目中使用的是第一种方法,正则变量方法匹配字符串。
这种正则的使用方法在js中有两种调用,分别叫做1、字面量模式;2、构造函数模式。
字面量模式:
var reg=/^\d+a/;
构造函数模式:
var reg = new RegExp("^\\d+a");
从上面我举的两个例子来看不难看出这两种模式的区别……主要是在元字符的使用前,字面量模式下使用元字符可以直接调用,而构造函数模式下,需要先转译才能使用……
当然,如果在构造函数模式下觉得每次都转译会比较麻烦,也可以直接使用与元字符相对应的正则表达式,比如“\d”就直接使用“[0-9]”这样子,只是我个人觉得还不如转译一下来得方便……
以上……