遇到了用 JavaScript 判断日期合法性的问题,感觉用正则表达式比较方便,记录一下。

表达式


var re = /((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89][13579][26])([-\/\._])(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579][26])([-\/\._])(0?2)([-\/\._])(29)$))/;

判断


日期的判断包括合法日期和非法日期的判断,尤其是闰年的判断。

合法日期

// 判断
var valid = re.test('2016-03-30');
// 结果
// true

非法日期

// 判断
var valid = re.test('2016-22-30');
// 结果
// false

平年闰年

// 判断
var valid = re.test('2016-02-29');
// 结果
// true

// 判断
var valid = re.test('2015-02-29');
// 结果
// false

// 判断
var valid = re.test('2000-02-29');
// 结果
// true

// 判断
var valid = re.test('2100-02-29');
// 结果
// false