Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许错误字符的Javascript日期验证_Javascript_Validation_Date - Fatal编程技术网

允许错误字符的Javascript日期验证

允许错误字符的Javascript日期验证,javascript,validation,date,Javascript,Validation,Date,出于某种原因,我的日期验证允许通过句号,但仅在该部分日期结束时,例如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 inval

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

有什么想法吗?

您可以使用函数检查日期是否有效。请看下面的代码:

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
}
函数isDate(dateStr){
var datePat=/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray=dateStr.match(datePat);//格式正确吗?
if(matchArray==null){
警报(“请输入日期为mm/dd/yyyy或mm dd yyyy”);
返回false;
}
月份=匹配数组[1];//p@rse将日期转换为变量
天=匹配数组[3];
年份=匹配数组[5];
如果(月<1 | |月>12){//检查月范围
警报(“月份必须介于1和12之间”);
返回false;
}
如果(第1天|第31天){
警报(“日期必须介于1和31之间”);
返回false;
}
如果((月=4 |月=6 |月=9 |月=11)和日=31){
警报(“月”+Month+“没有31天!”)
返回false;
}
如果(月==2){//检查2月29日
var isleap=(第%4年==0&&(第%100年!=0 | |第%400年==0));
如果(天>29 | |(天==29&&!isleap)){
警报(“二月+年+”没有“+天+”天!”);
返回false;
}
}
返回true;//日期有效
}

您可以使用函数检查日期是否有效。请看下面的代码:

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
}
函数isDate(dateStr){
var datePat=/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray=dateStr.match(datePat);//格式正确吗?
if(matchArray==null){
警报(“请输入日期为mm/dd/yyyy或mm dd yyyy”);
返回false;
}
月份=匹配数组[1];//p@rse将日期转换为变量
天=匹配数组[3];
年份=匹配数组[5];
如果(月<1 | |月>12){//检查月范围
警报(“月份必须介于1和12之间”);
返回false;
}
如果(第1天|第31天){
警报(“日期必须介于1和31之间”);
返回false;
}
如果((月=4 |月=6 |月=9 |月=11)和日=31){
警报(“月”+Month+“没有31天!”)
返回false;
}
如果(月==2){//检查2月29日
var isleap=(第%4年==0&&(第%100年!=0 | |第%400年==0));
如果(天>29 | |(天==29&&!isleap)){
警报(“二月+年+”没有“+天+”天!”);
返回false;
}
}
返回true;//日期有效
}
这是因为
“12”。
在将字符串解析为数字时被解释为
12
(这发生在日期对象的内部)。
试试这个:

if(isValidDate(a[0],a[1]-1,a[2]) == false && iDate.indexOf('.') == -1){
基本上,只需检查点。

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

if(isValidDate(a[0],a[1]-1,a[2]) == false && iDate.indexOf('.') == -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”
,它们在有效日期上相等。

如评论中所述,以下是解决方案:

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”
,它们在有效日期上相等

  • 是一个有效的数字。在它被传递给日期构造函数之后,它被转换为数字12.0,显然等于12。1.2并非如此。我建议您首先匹配regexp,然后像您那样检查部件的正确性
  • 我建议您实施如下内容:

    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()));
    }
    
  • 是一个有效的数字。在它被传递给日期构造函数之后,它被转换为数字12.0,显然等于12。1.2并非如此。我建议您首先匹配regexp,然后像您那样检查部件的正确性
  • 我建议您实施如下内容:

    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()));
    }
    

    这是我的日期验证版本。它不允许输入错误的日期,即使有人打算输入。这也将在月和日之后自动填充

    $("#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));
                            }
                        }
                    }
                });
    

    这是我的日期验证版本。它不允许输入错误的日期,即使有人打算输入。这也将在月和日之后自动填充

    $("#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));
                            }
                        }
                    }
                });
    

    好吧,我得说12。JavaScript将其解释为12,因此它比较12和12,但1.2与12不相等(它将它们作为整数进行比较)。我要说做一个.toString()并比较字符串。这只是我的猜测:)或者尝试使用三个相等(==)来进行严格的比较。那么存储在dteDate上的结果日期是正确的吗?或者只是一个有效的日期?-1是正确的,在本例中,对于几个月,JavaScript从0@jValdron谢谢,伙计,我只是问问而已!奇怪的事情发生在201年10月12日。如果你在这个月做了类似的事情,也会被通过@Deleteman结果日期是它接受的任何日期,因此它将接受12./10/201,例如,我认为是12。JavaScript将其解释为12,因此它比较12和12,但1.2与12不相等(它将它们作为整数进行比较)。我要说做一个.toString()并比较字符串。这只是我的猜测:)或者尝试使用三个相等(==)来进行严格的比较。那么存储在dteDate上的结果日期是正确的吗?或者只是一个有效的日期?-1是正确的,在本例中,对于几个月,JavaScript从0@jValdron谢谢,伙计,我只是问问而已!奇怪的事情发生在201年10月12日。如果你在这个月做了类似的事情,也会被通过@Deleteman结果日期是它接受的任何日期,因此它将接受12./10/201,例如。答案是好的。然而,最好是