Javascript 如何测试输入为2位数字的日期、月份和年份是否有效?

Javascript 如何测试输入为2位数字的日期、月份和年份是否有效?,javascript,jquery,date,Javascript,Jquery,Date,在我的表单中,用户可以这样输入日期:220875(天、月、年) 一旦他们输入了详细信息,我想测试日期是否有效: 月份从1月到12月(含12月) 输入的日期对指定月份有效 我如何确定这些值是否正确且匹配 以下是我的尝试:(节选) 如果有用的话,这里有一个.js regexp可能是这样的 /([0-2][0-9]|3[01])(0[1-9]|1[0-2])(\d{2})/ 您似乎使用了DD/MM/YYYY格式 因此,您可以轻松地使用此即用代码: JavaScript // Checks a str

在我的表单中,用户可以这样输入日期:
220875
(天、月、年)

一旦他们输入了详细信息,我想测试日期是否有效:

  • 月份从1月到12月(含12月)
  • 输入的日期对指定月份有效
  • 我如何确定这些值是否正确且匹配

    以下是我的尝试:(节选)


    如果有用的话,这里有一个.js regexp可能是这样的
    
    /([0-2][0-9]|3[01])(0[1-9]|1[0-2])(\d{2})/
    

    您似乎使用了DD/MM/YYYY格式

    因此,您可以轻松地使用此即用代码:

    JavaScript

    // Checks a string to see if it in a valid date format
    // of (D)D/(M)M/(YY)YY and returns true/false
    function isValidDate(s) {
        // format D(D)/M(M)/(YY)YY
        var dateFormat = /^\d{1,4}[\.|\/|-]\d{1,2}[\.|\/|-]\d{1,4}$/;
    
        if (dateFormat.test(s)) {
            // remove any leading zeros from date values
            s = s.replace(/0*(\d*)/gi,"$1");
            var dateArray = s.split(/[\.|\/|-]/);
    
            // correct month value
            dateArray[1] = dateArray[1]-1;
    
            // correct year value
            if (dateArray[2].length<4) {
                // correct year value
                dateArray[2] = (parseInt(dateArray[2]) < 50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2]);
            }
    
            var testDate = new Date(dateArray[2], dateArray[1], dateArray[0]);
            if (testDate.getDate()!=dateArray[0] || testDate.getMonth()!=dateArray[1] || testDate.getFullYear()!=dateArray[2]) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }
    
    //检查字符串是否为有效的日期格式
    //of(D)D/(M)M/(YY)YY并返回true/false
    函数isValidDate(s){
    //格式D(D)/M(M)/(YY)YY
    var dateFormat=/^\d{1,4}[\.\124;\/-]\ d{1,2}[\.\124;\/-]\ d{1,4}$/;
    if(日期格式测试){
    //从日期值中删除任何前导零
    s=s.replace(/0*(\d*)/gi,“$1”);
    var dateArray=s.split(/[\.\/\-]/);
    //正确月份值
    dateArray[1]=dateArray[1]-1;
    //正确年份值
    如果(dateArray[2]。长度,请尝试使用以下验证函数:

    如果您不介意按照@hvost的建议使用,可以尝试修改
    DateIsOk()
    验证函数,如下所示:

    ...
    dateParts : ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"],
    DateIsOk:function(value) {        
        var dayobj = moment(value, "DDMMYY");
    
        if (dayobj.isValid()) {
            this.errorHandler(true);
            return true;
        }
        else {
            this.errorHandler('Invalid ' + this.dateParts[dayobj.invalidAt()]);
            return false;
        }
    }
    ...
    

    这是更新后的

    你是在问如果(fieldMonth>12)
    如何做吗?我正在尝试使用Date对象进行验证。这可能吗?特别是发送像这个新日期(ddmmyy)这样的值,因为在2月份甚至可以得到28天的时间?我同意。通过独立的base检查值。例如,如果我给出日期“300275”-二月没有“30”。它给出的是“true”。是的,二月问题将通过修补js检查解决。也许您可以在regexp测试后添加它。但另一个问题是,二月在不同的年份有不同的天数。必须特别检查。
    moment([2014, 25, 35]).isValid();
    
    moment("2014-25-35").isValid();
    
    ...
    dateParts : ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"],
    DateIsOk:function(value) {        
        var dayobj = moment(value, "DDMMYY");
    
        if (dayobj.isValid()) {
            this.errorHandler(true);
            return true;
        }
        else {
            this.errorHandler('Invalid ' + this.dateParts[dayobj.invalidAt()]);
            return false;
        }
    }
    ...