Javascript错误地验证日期
我编写了一个函数来检查日期是否有效 除了一小部分,我写了所有的 功能不工作,我找不到错误,你能帮忙吗 我可以看到,因为数字29不在数组中,所以它不工作,但是我不知道如何让它工作Javascript错误地验证日期,javascript,Javascript,我编写了一个函数来检查日期是否有效 除了一小部分,我写了所有的 功能不工作,我找不到错误,你能帮忙吗 我可以看到,因为数字29不在数组中,所以它不工作,但是我不知道如何让它工作 函数isValidDate(){ var dateformat=/^(0?[1-9]|[12][0-9]|[3[01])[-](0?[1-9]|[012])[-]\d{4}$/; var readDate=document.getElementById(“myDate”).value; 如果(readDate.leng
函数isValidDate(){
var dateformat=/^(0?[1-9]|[12][0-9]|[3[01])[-](0?[1-9]|[012])[-]\d{4}$/;
var readDate=document.getElementById(“myDate”).value;
如果(readDate.length放弃所有这些
<input type="date" />
这是因为如果日期超出有效范围(例如,1月32日被更正为2月1日),JavaScript将“修复”日期,所以只需检查它在收到日期时是否更改了任何内容。
函数验证(值){
var v=假;
如果(值){
var r=value.match(/([0-9]{1,2})。?([0-9]{1,2})。?([0-9]{4})/;
if(r){
var day1=parseInt(r[1]);
var month1=parseInt(r[2]);
var year1=parseInt(r[3]);
var d=新日期(第1年,第1个月-1天);
var day2=d.getDate();
var month2=d.getMonth()+1;
var year2=d.getFullYear();
v=第1天==第2天&&
month1==month2&&
第1年=第2年;
}
}
返回v;
}
检查
根据正则表达式测试日期您必须减少测试
如果要继续,请不要返回
下面是一个让代码尽可能接近您想要做的事情的解决方案。使用Date对象的更简单的解决方案我已经在一篇评论中建议过了,其他人已经详细介绍过了
功能淋浴ROR(str){
console.log(str)
返回false;
}
函数isValidDate(){
var dateformat=/^(0?[1-9]|[12][0-9]|[3[01])[-](0?[1-9]|[012])[-]\d{4}$/;
var readDate=document.getElementById(“myDate”).value;
如果(readDate.length!=10)返回错误(“无效日期长度”)//长度不正确
log(dateformat.test(readDate));
如果(!dateformat.test(readDate)){
返回错误(“无效日期格式”)//与正则表达式不匹配
}
/*将日期拆分为DD-MM-YYYY格式*/
var splitDate=readDate.split('-');
var day=splitDate[0];
var月=拆分日期[1];
var年=拆分日期[2];
/*调试-将拆分日期打印为DD-MM-YYYY格式*/
控制台日志('天'+天);
console.log(“月”+月);
控制台日志(年+年);
//创建一个月的天数列表[假设默认情况下没有闰年]
var ListofDays=[31,28,31,30,31,30,31,31,30,31];
//如果月份不在1-12之间
如果(第12个月){
返回错误('0-无效的月份格式!');
}
var isLeap=false;
//检查闰年
如果(年份%4==0和年份%100!==0){
log('year'+year+'是闰年');
isLeap=true;
}否则如果(第%4年===0和第%100年===0和第%400年===0){
log('year'+year+'是闰年');
isLeap=true;
}否则{
console.log('年份'+year+'不是闰年');
}
//月份中存在检查日
var testDay=ListofDays[month-1];//数组从0开始
//testDay+=isLeap?1:0;//使用三元运算符向testDay添加一个
if(isLeap)testDay++;//代码更少,执行与上面相同的操作
如果(天>测试日){
返回错误('1-无效的日期格式!');
}
log('1-有效日期格式!');
//如果需要,可以在此处返回true
}
输入日期并检查其格式是否正确,以及是否为有效日期
检查日期
帮你自己一个忙。这为你做了很多艰苦的工作。@Liam这会教给他什么。对于这样一个简单的任务来说也是非常浪费的。在“-”上拆分日期字符串要简单得多,从各个部分创建一个新的日期对象(记住从0开始月份):var testDate=new Date(年,月-1,天,0,0)
并测试这些部分是否与日期部分相同。此外,我没有看到您使用regex抱歉,我是JS新手,我以为它使用的是regex?如何让它使用regex?这又有什么作用?(day>ListofDays[月-1])只是不能解决这个问题谢谢,但我不需要JS来确定日期。我真的希望它能按照我自己学习的方式工作,然后稍后尝试改进。谢谢你,但是为什么我的代码不起作用?这就是我想尝试的,真的要解决这个问题谢谢你,我在路上,所以无法测试,稍后会测试…顺便说一下我如何修改正则表达式,使其不允许在文本框中插入字母?谢谢,如果您想继续,请不要返回-啊,我看到testday+=isLeap?1:0//这怎么可以简化,因为我不理解这一点,也不编写类似这样的IF语句,我真的不介意它是一个长版本,这是供我学习的testDay+=
是testDay=testDay+…
的缩写,isLeap?1:0
称为三元,是if(isLeap)testDay=testDay+1;else testDay=testDay+0;也可以编写if(isLeap)testDay++;
return将离开函数。您可以像这样使用返回值:if(isValidDate())this.form.submit();
var input = document.getElementById("myDate").value;
var parts = input.split("-");
var date = new Date(parts[2],parts[1]-1,parts[0]);
return date.getFullYear() == parts[2]
&& date.getMonth() == parts[1]-1
&& date.getDate() == parts[0];