出于某种原因,我的日期验证允许传递fullstops,但仅在该日期的那一部分结束时,例如12./10/201获得通过,但1.2 / 10/201没有通过。
这是我的代码:
var iDate = $("check_date").value;
if(iDate.length > 0) {
var a = iDate.split("/");
if(isValidDate(a[0],a[1]-1,a[2]) == false){
alert("You have entered an invalid date.");
return false;
}
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
}
有什么想法吗?
答案 0 :(得分:2)
您可以使用函数检查日期是否有效。看看这段代码:
function isDate(dateStr) {
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
return false;
}
month = matchArray[1]; // p@rse date into variables
day = matchArray[3];
year = matchArray[5];
if (month < 1 || month > 12) { // check month range
alert("Month must be between 1 and 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Day must be between 1 and 31.");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Month "+month+" doesn`t have 31 days!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
alert("February " + year + " doesn`t have " + day + " days!");
return false;
}
}
return true; // date is valid
}
答案 1 :(得分:1)
正如评论中所讨论的,这是解决方案:
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}
您还需要toString()方法,就像比较"12"
和12
一样,它们将不相等。现在,您将"12"
与"12"
进行比较,这对于有效日期将是相等的。
答案 2 :(得分:0)
这是因为"12."
在将字符串解析为数字时解释为12
(这在内部发生,在日期对象中)。
试试这个:
if(isValidDate(a[0],a[1]-1,a[2]) == false && iDate.indexOf('.') == -1){
基本上,只需检查点。
答案 3 :(得分:0)
我建议你实施这样的事情:
function isValidDate(dateString)
{
if(! dateString.match(/((1[0-2])|(0?\d))\/(([0-2]?\d)|(3[0-1]))/(\d\d)?\d\d/) )
return false;
var parts = dateString.split("/");
var dateToCheck = new Date(parts[0],parts[1]-1,parts[2]);
return ((parts[0]==dateToCheck.getDate()) && (parts[1]==dateToCheck.getMonth()+1) && (parts[2]==dateToCheck.getFullYear()));
}
答案 4 :(得分:0)
这是我的日期验证版本。即使有人打算输入,也不允许输入错误的日期。这也将在月/日之后自动填充。
$("#date").keyup(function (e) {
// validation for length max 10
var temp = $(this).val();
if (temp.length > 10) $(this).val(temp.substring(0, temp.length - 1));
var key = String.fromCharCode(e.keyCode);
console.log(key + " " + e.keyCode);
var regex = /[0-9]|[a-i]|\/|\`|\o|\¿|\%|\'|\$/;
// checking teh allowed character
if (!regex.test(key)) {
// checking backspace and shift key ( need to allow)
if (e.keyCode != 8 && e.keyCode != 16) {
var tam = $(this).val().length;
$(this).val(temp.substring(0, tam - 1));
}
}
else {
//if its not backslash
if (e.keyCode != 191 && e.keyCode != 111) {
if ($(this).val().length == 2) {
$(this).val($(this).val() + "/");
} else if ($(this).val().length == 5) {
$(this).val($(this).val() + "/");
}
}
else {
// if backslash
if ($(this).val().length != 3 && $(this).val().length != 6) {
var tam = $(this).val().length;
$(this).val(temp.substring(0, tam - 1));
}
}
}
});