我需要使用正则表达式验证1600到9999之间的日期年份。有人知道最好的方法吗?例如,使用此给定格式dd/mm/yyyy
。
答案 0 :(得分:2)
假设您可以信任该格式,最简单的方法就是在/
上拆分并检查年份是否在此范围内。
var year = date.split("/").pop();
valid = year >= 1600 && year <= 9999
如果 使用正则表达式:
/\d\d\/\d\d\/(1[6-9]\d\d|[2-9]\d\d\d)/
可能就是你想要的。
如果您需要更复杂的日期解析,则应使用moment.js
之类的内容var year = moment(date, "DD/MM/YYYY").year();
答案 1 :(得分:1)
如果你正在使用Javascript,只需将值作为字符串,然后将其推送到Date()
对象。不需要正则表达式。
date = new Date("24/12/2014") //Valid date
date = new Date("40/10/2014") //Invalid date
//Detect whether date is valid or not:
if( !isNan( date.valueOf() ) ) { //You can also use date.getTime() instead
//Valid Date
} else {
//Invalid Date
}
从这里开始,您可以根据需要提取date
对象,例如date.getMonth()
。享受!
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
答案 2 :(得分:1)
不要使用正则表达式,请尝试以下函数:
function isValidDate(dateString)
{
// First check for the pattern
if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString))
return false;
// Parse the date parts to integers
var parts = dateString.split("/");
var day = parseInt(parts[0], 10);
var month = parseInt(parts[1], 10);
var year = parseInt(parts[2], 10);
// Check the ranges of month and year
if(year < 1600 || year > 9999 || month == 0 || month > 12)
return false;
var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
// Adjust for leap years
if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
monthLength[1] = 29;
// Check the range of the day
return day > 0 && day <= monthLength[month - 1];
};
工作示例: