在javascript中进行日期validation的正则表达式

请有人给出日期validation正则表达式,这将允许以下规则

  1. 它应该允许mm / dd / yyyy,m / d / yyyy,mm / d / yyyy,m / d / yyyy (不允许yy)
  2. 月份(30和31)validation的天数。
  3. 飞跃和非闰年的2月份validation。

试试这个:

 ([0-9][1-2])/([0-2][0-9]|[3][0-1])/((19|20)[0-9]{2}) 

然后如果你从上面的正则表达式得到一个有效的字符串,然后使用字符串操作,请执行以下操作:

 if(/([0-9][1-2])\/([0-2][0-9]|[3][0-1])\/((19|20)[0-9]{2})/.test(text)){ var tokens = text.split('/'); // text.split('\/'); var day = parseInt(tokens[0], 10); var month = parseInt(tokens[1], 10); var year = parseInt(tokens[2], 10); } else{ //show error //Invalid date format } 

不要试图用正则表达式完全解析日期!遵循KISS原则..

1>使用此正则表达式获取日期

 ^(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})$ 

2>如果字符串与上面的正则表达式匹配,则validation月,年,日!

 var match = myRegexp.exec(myString); parseInt(match[0],10);//month parseInt(match[1],10);//day parseInt(match[2],10);//year 

这是一个完整的validation程序

 var myInput = s="5/9/2013"; var r = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/; if(!r.test(myInput)) { alert("Invalid Input"); return; } var a = s.match(r), d = new Date(a[3],a[1] - 1,a[2]); if(d.getFullYear() != a[3] || d.getMonth() + 1 != a[1] || d.getDate() != a[2]) { alert("Invalid Date"); return; } // process valid date