Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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 - Fatal编程技术网

javascript中的日期验证程序

javascript中的日期验证程序,javascript,Javascript,我有几个月的java经验,但现在我正试图编写我的第一个javascript来验证日期输入。我不确定代码中有什么错误 <label for="Start-date" class="label">Available start date</label> <input type="text" onsubmit="isValidDate()" class="w-input" maxlength="256" name="Star

我有几个月的java经验,但现在我正试图编写我的第一个javascript来验证日期输入。我不确定代码中有什么错误

            <label for="Start-date" class="label">Available start date</label>
            <input type="text" onsubmit="isValidDate()" class="w-input" maxlength="256" name="Start-date" data-name="Start date" placeholder="dd/mm/yyyy" id="Start-date" th:value="${possibleStartDate}" />
            <script>
            var validDate = true;
            function isValidDate(){

                var dateString = document.getElementById("Start-date");
                // First check for the pattern
                if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(dateString)){
                    validDate = false;
                    return;
                }  

                // Parse the date parts to integers
                var parts = dateString.split("/");
                var day = parseInt(parts[1], 10);
                var month = parseInt(parts[0], 10);
                var year = parseInt(parts[2], 10);

                // Check the ranges of month and year
                if(year < 1000 || year > 3000 || month == 0 || month > 12){
                    validDate = false;
                    return;
                }    

                var monthLength = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

                // Adjust for leap years
                if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)){
                    monthLength[1] = 29;
                }    

                // Check the range of the day
               if (!(day > 0 && day <= monthLength[month - 1])){
                   validDate = false;
                   return;
               }else{
                   return;
               }
            };
            if(!validDate){
                alert("Invalid date!");
            }
            </script>
可用开始日期
var validDate=真;
函数isValidDate(){
var dateString=document.getElementById(“开始日期”);
//首先检查模式
if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(日期字符串)){
validDate=假;
回来
}  
//将日期部分解析为整数
var parts=dateString.split(“/”);
var day=parseInt(第[1]部分,第10节);
变量月=parseInt(部分[0],10);
var year=parseInt(第[2]部分,第10节);
//检查月份和年份的范围
如果(年<1000 |年>3000 |月==0 |月>12){
validDate=假;
回来
}    
var monthLength=[31,28,31,30,31,30,31,31,30,31,31];
//调整闰年
如果(年份%400==0 | |(年份%100!=0和年份%4==0)){
月长[1]=29;
}    
//检查一天的活动范围
如果(!(day>0&&day如果使用,则可以使用
Date
构造函数(

HTML5还支持
标记中的
type=“date”
。这将防止浏览器在日期无效时提交表单

还有,我想你是说

var dateString = document.getElementById("Start-date").value;
而不是

var dateString = document.getElementById("Start-date");

因为
document.getElementById(“开始日期”)
是一个对象。

有很多东西需要稍微调整一下:

  • var-dateString=document.getElementById(“开始日期”)
    应该是
    var-dateString=document.getElementById(“开始日期”).value;

  • var-day=parseInt(parts[1],10);
    应该是
    var-day=parseInt(parts[0],10);
    var-month=parseInt(parts[1],10);
    应该是
    var-month=parseInt(parts[1],10);
    支持
    dd/mm/yyyyy

  • 输入不会在submit上激发
    onsubmit
    ,除非它们是表单的一部分,您可以尝试使用
    onblur

  • 我已经用div包装了输入,子项表示成功/错误,以便更好地显示消息。(使用根div上的类和支持样式隐藏消息)

  • 我已经率先从DOM操作中验证了日期字符串,因此您可以跨多个位置重用验证

  • 注:

  • 您最好将输入类型设置为
    date
    (如果浏览器支持,它将打开一个日期选择器)
  • 您还可以选择使用库,例如使常见的日期操作更容易一些
  • /**
    *函数,该函数将字符串作为输入,并验证
    *是dd/mm/yyyy格式的日期
    *@param{string}dateString-要验证的日期的字符串表示形式
    8@返回{boolean}值,指示日期是否有效(true)或无效(false)
    */
    函数isValidDate(日期字符串){
    var validDate=真;
    //首先检查模式
    if(!/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(日期字符串)){
    返回false;
    }
    //将日期部分解析为整数
    var parts=dateString.split(“/”);
    var-day=parseInt(部分[0],10);
    var月=parseInt(第[1]部分,第10节);
    var year=parseInt(第[2]部分,第10节);
    如果(isNaN(日)| isNaN(月)| isNaN(年)){
    返回false;
    }
    //检查月份和年份的范围
    如果(年<1000 |年>3000 |月<1 |月>12){
    返回false;
    }
    var monthLength=[31,28,31,30,31,30,31,31,30,31,31];
    //调整闰年
    如果(年份%400==0 | |(年份%100!=0和年份%4==0)){
    月长[1]=29;
    }
    //检查一天的活动范围
    
    如果(!(day>0&&day)可以尝试输入类型date或datepicker。否则,对所有局部变量进行解析可能会很麻烦。此外,您只需使用
    添加更多错误检查,例如检查dateString赋值的返回,永远不要认为它会成功。
    var dateString = document.getElementById("Start-date");