在javascript中进行日期validation的正则表达式
请有人给出日期validation正则表达式,这将允许以下规则
- 它应该允许mm / dd / yyyy,m / d / yyyy,mm / d / yyyy,m / d / yyyy (不允许yy)
- 月份(30和31)validation的天数。
- 飞跃和非闰年的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