javascript中的日期验证程序
我有几个月的java经验,但现在我正试图编写我的第一个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
<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");