Javascript正则表达式匹配一个时间格式的字符串,同时将天数与每个月份最后一天对比,比如匹配如:2016-02-29 23:02:03
获取某个月份的最后一天:
1 |
var lastDay = new Date(year, month, 0).getDate(); |
month从0开始,0表示1月份,1表示2月份,以此类推。
匹配方法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function validateDateTime(testdate) { var date_regex = /((19|20)[0-9]{2})-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) ([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/; var res = date_regex.test(testdate); if(res) { var ymd = testdate.match(/(\d{4})-(\d+)-(\d+).*/); var year = parseInt(ymd[1]); var month = parseInt(ymd[2]); var day = parseInt(ymd[3]); if(day > 28) { //获取当月的最后一天 var lastDay = new Date(year, month, 0).getDate(); return (lastDay >= day); } return true; } return false; } console.log(validateDateTime("2015-2-29 23:23:02")); console.log(validateDateTime("2016-2-29 23:43:02")); console.log(validateDateTime("2016-4-31 23:43:02")); console.log(validateDateTime("2015-3-1 25:73:02")); |
分别输出
1 2 3 4 |
false true false false |
正则表达式关于最后年-月-日中的“日”排序有误,应改为:
/([2-9][0-9][0-9]{2})\-(0?[1-9]|1[012])\-(3[01]|[12][0-9]|0?[1-9])/
感觉没什么区别,不这样排序的话,哪一个例子匹配有误?