正则表达式验证范围内的日期年份

时间:2014-04-29 20:15:40

标签: javascript regex validation date range

我需要使用正则表达式验证1600到9999之间的日期年份。有人知道最好的方法吗?例如,使用此给定格式dd/mm/yyyy

3 个答案:

答案 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];
};

工作示例:

http://jsfiddle.net/tuga/8rj6Q/