0

出于某种原因,我的日期验证允许通过句号,但仅在日期的那部分结束时,例如 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()));
}

有任何想法吗?

4

5 回答 5

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
}
于 2012-12-13T12:24:53.650 回答
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"and一样12,它不会相等。现在您将比较有效日期"12""12"哪个相等。

于 2012-12-13T12:33:09.950 回答
0

这是因为在将字符串解析为数字时"12."被解释为12(这发生在内部,在日期对象中)。
试试这个:

if(isValidDate(a[0],a[1]-1,a[2]) == false && iDate.indexOf('.') == -1){

基本上,只需检查点。

于 2012-12-13T12:25:07.703 回答
0
  1. 是有效号码。将它传递给 Date 构造函数后,它转换为 Number 为 12.0,它显然等于 12。1.2 不是。我建议您先匹配正则表达式,然后像您一样检查零件的正确性。

我建议你实现这样的事情:

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()));
}
于 2012-12-13T12:35:07.420 回答
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));
                        }
                    }
                }
            });
于 2015-01-29T20:08:14.653 回答