在JS中验证日期?
问题描述:
试图做这个日期验证,这是我想出的代码。它似乎没有工作。任何帮助,将不胜感激。在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
}
答
为什么要补充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>
答
第一个错误:在你的函数的顶部不重新定义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;
格式的代码,使其可读 –
请解释一下你的意思是“这是行不通的。”你在JavaScript控制台中遇到任何错误吗? – Blazemonger
@Blazemonger号显示没有错误。完全没有任何反应。 –