2016-04-29 64 views
0

试图做这个日期验证,这是我想出的代码。它似乎没有工作。任何帮助,将不胜感激。在JS中验证日期?

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 
} 
+0

格式的代码,使其可读 –

+0

请解释一下你的意思是“这是行不通的。”你在JavaScript控制台中遇到任何错误吗? – Blazemonger

+0

@Blazemonger号显示没有错误。完全没有任何反应。 –

回答

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> 
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;