在JS中验证日期?

时间:2016-04-29 14:16:04

标签: javascript

尝试执行此日期验证,这是我提出的代码。它似乎不起作用。任何帮助将不胜感激。

function isValidDate(dateStr) {
    // Checks for the following valid date formats:
    // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY

    var dateStr = document.getElementById("dob").value;

    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

    var matchArray = dateStr.match(datePat);   

    if (matchArray == null){
        errMsg = errMsg + "Date is not in a valid format.";
        result = false;
    }

    var month = matchArray[1];

    var day = matchArray[3];

    var year = matchArray[4];

    if (month < 1 || month > 12){ 
        errMsg = errMsg + "Month must be between 1 and 12.";
        result = false;
    }

    if (day < 1 || day > 31){
        errMsg = errMsg + "Day must be between 1 and 31.";
        result = false;
    }

    if ((month==4 || month==6 || month==9 || month==11) && day==31){
        errMsg = errMsg + "Month "+month+" doesn't have 31 days!";
        result = false;
    }

    if (month == 2){ // check for leap year

        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

        if (day>29 || (day==29 && !isleap)){
        errMsg = errMsg + "February " + year + " doesn't have " + day + " days!";
        result = false;
        }
    }

    return result;      // date is valid
}

2 个答案:

答案 0 :(得分:0)

为什么在通过

访问时将datestr作为参数添加
var dateStr = document.getElementById("dob").value;

其次我放了一些控制台并尝试运行这个功能,并发现你的月份和日期是月份。只需输入console.log并检查它。休息你需要在使用它之前声明变量没有变量被初始化它做它并且一切都会正常工作。这是代码

<script type="text/javascript">
 function isValidDate(dateStr) {
// Checks for the following valid date formats:
// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY

var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

var matchArray = dateStr.match(datePat); 

var errMsg;

var result = true;

if (matchArray == null){
    errMsg = errMsg + "Date is not in a valid format.";
    result = false;
}

var day= matchArray[1];

var month= matchArray[3];

var year = matchArray[4];


if (month < 1 || month > 12){ 
    errMsg = errMsg + "Month must be between 1 and 12.";
    result = false;
}

if (day < 1 || day > 31){
    errMsg = errMsg + "Day must be between 1 and 31.";
    result = false;
}

if ((month==4 || month==6 || month==9 || month==11) && day==31){
    errMsg = errMsg + "Month "+month+" doesn't have 31 days!";
    result = false;
}

if (month == 2){ // check for leap year

    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

    if (day>29 || (day==29 && !isleap)){
    errMsg = errMsg + "February " + year + " doesn't have " + day + " days!";
    result = false;
    }
}

console.log(result);      // date is valid
 }
</script>

答案 1 :(得分:0)

第一个错误:如果您将其作为参数传递,请不要在函数顶部重新定义dateStr - 否则不要将其作为参数传递。

第二个和第三个错误:在函数开头初始化errMsg = '';result = true;

function isValidDate(dateStr) {
    // Checks for the following valid date formats:
    // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY

//    var dateStr = document.getElementById("dob").value;
    var errMsg = '';
    var result = true;

或:

function isValidDate() {
    // Checks for the following valid date formats:
    // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY

    var dateStr = document.getElementById("dob").value;
    var errMsg = '';
    var result = true;