Javascript日期验证(DD/MM/YYYY)和;年龄检查

Javascript日期验证(DD/MM/YYYY)和;年龄检查,javascript,html,validation,Javascript,Html,Validation,我最近开始研究Javascript。我测试的是检查DoB的有效格式。下一步将检查年龄 下面是我的HTML代码 <form name="ProcessInfo" action="#" method="POST" enctype="multipart/form-data" target="_self" onsubmit="return checkForm();"> . . . . <br> <label for="txtDOB">Date of Birth:* &

我最近开始研究Javascript。我测试的是检查DoB的有效格式。下一步将检查年龄

下面是我的HTML代码

<form name="ProcessInfo" action="#" method="POST" enctype="multipart/form-data" target="_self" onsubmit="return checkForm();">
.
.
.
.
<br>
<label for="txtDOB">Date of Birth:* </label>
<input id="txtDOB" type="text" name="txtDOB" size="12">
format: ##/##/####
<br>
.
.
.
</form>
.
.

我试图用正则表达式检查它是否有效,但即使键入的日期正确,我也总是收到一个警报。我如何分离DD/MM/YYYY来计算年龄?

如果要在格式中使用前斜杠,则需要在正则表达式中使用后斜杠:

var pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;

您已将正则表达式用于此格式: 年月日

如果您需要此格式DD/MM/YYYY,请使用

var pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;

我会利用内置的
Date
对象为我进行验证。即使从
-
切换到
/
后,您仍然需要检查月份是否介于0和12之间,日期是否介于0和31之间,年份是否介于1900和2013之间

function validateDOB(){

    var dob = document.forms["ProcessInfo"]["txtDOB"].value;
    var data = dob.split("/");
    // using ISO 8601 Date String
    if (isNaN(Date.parse(data[2] + "-" + data[1] + "-" + data[0]))) {
        return false;
    }

    return true;
}
有关更多信息,请参阅。

我建议使用,它提供了一种易于使用的方法

要在页面中包含“瞬间”,您可以使用CDNJS:

<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>

要获取值,请使用pattern.exec()而不是pattern.test()(.test()返回布尔值)


此代码将验证日期格式DD/MM/YY

如果要在格式中使用前斜杠,则需要在正则表达式中使用后斜杠转义:

var pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;

var dateformat=/^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/

函数dateCheck(){
调试器;
var inputValues=document.getElementById('dateInput')。value+''+document.getElementById('monthInput')。value+''+document.getElementById('yearInput')。value;
var d=新日期();
var n=d.getHours();
var m=d.getMinutes();
var p=d.getSeconds();
var date=document.getElementById(“dateInput”).value;
var month=document.getElementById(“monthInput”).value;
var year=document.getElementById(“yearInput”).value;
var dateCheck=/^(0?[1-9]|[12][0-9]| 3[01])$/;
var monthCheck=/^(0[1-9]| 1[0-2])$/;
var yearCheck=/^\d{4}$/;
if(月匹配(月检查)和日期匹配(日期检查)以及年匹配(年检查)){
var ListofDays=[31,28,31,30,31,30,31,31,30,31];
如果(月==1 | |月>2){
如果(日期>列表日期[月份-1]){
警报(“无效的日期格式!”);
返回false;
}
}
如果(月份==2){
var年=假;
如果(!(第%4年)和&100年)| |!(第%400年)){
闰年=真;
}
如果((leapYear==false)和&(date>=29)){
警报(“无效的日期格式!”);
返回false;
}
如果((leapYear==true)和&(日期>29)){
警报(“无效的日期格式!”);
返回false;
}
}
var标志=1
}
否则{
警报(“无效日期”);
}
如果(标志==1){
警报(“日期为:“+inputValues+”+”+”时间为:“+n+”:“+m+”:“+p”);
}
清除();
}
函数clear(){
document.myForm.dateInput.value=“”;
document.myForm.monthInput.value=“”;
document.myForm.yearInput.value=“”;
}
输入日期
输入月份
进入年份

带前导零的日期和月份

var pattern =/^(0[1-9]|1[0-9]|2[0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([0-9]{4})$/;
var pattern =/^(0?[1-9]|1[0-9]|2[0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/([0-9]{4})$/;
并且在日期和月份都有前导零/没有前导零

var pattern =/^(0[1-9]|1[0-9]|2[0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([0-9]{4})$/;
var pattern =/^(0?[1-9]|1[0-9]|2[0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/([0-9]{4})$/;
我使用我找到的代码@

代码负责

  • 不到12个月,

  • 少于32天

  • 甚至可以与闰年一起使用。 在我的闰年项目中使用时,我修改了如下代码

    如果((lyear==false)&&(dd>=29))
    {
    警报('无效的日期格式!');
    返回false;
    }

    如果((lyear==false)&&(dd>=29))
    {
    警报(“非闰年二月不能超过28天”);
    返回false;
    }

而不是抛出对用户没有多大意义的通用“无效日期格式”错误。 我修改了代码的其余部分,以提供有效的错误消息,如月份不能超过12天,天数不能超过31天等


使用正则表达式的问题是很难准确地识别出哪里出了问题。它要么给出正确的答案,要么给出错误的答案,而没有任何失败的原因。我们必须编写多个正则表达式来对这个问题进行排序。

这是两个问题-斜杠位置是否正确,日期是否有效。 我建议您捕捉输入更改,并将斜杠放在自己身上。(对用户来说很烦人)

有趣的问题是他们是否输入了有效日期,我建议利用js的灵活性:

函数isValidDate(str){
var newdate=新日期();
变量yyyy=2000+Number(str.substr(4,2));
var mm=数量(str.substr(2,2))-1;
var dd=数量(str.substr(0,2));
newdate.setFullYear(yyyy);
newdate.setMonth(mm);
newdate.setDate(dd);
返回dd==newdate.getDate()&&mm==newdate.getMonth()&&yyyy==newdate.getFullYear();
}
log(isValidDate('jk'))//假的
console.log(isValidDate('290215'))//假的
console.log(isValidDate('290216'))//真的

console.log(isValidDate('292216'))//错误
使用模式并检查验证:

var input = '33/15/2000';

var pattern = /^((0[1-9]|[12][0-9]|3[01])(\/)(0[13578]|1[02]))|((0[1-9]|[12][0-9])(\/)(02))|((0[1-9]|[12][0-9]|3[0])(\/)(0[469]|11))(\/)\d{4}$/;

alert(pattern.test(input));
你可以在
var date=/^[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{1,4}$/;

if(!date.test(form.date.value))

alert("Enter correct date");

else
alert(" working");
var input = '33/15/2000';

var pattern = /^((0[1-9]|[12][0-9]|3[01])(\/)(0[13578]|1[02]))|((0[1-9]|[12][0-9])(\/)(02))|((0[1-9]|[12][0-9]|3[0])(\/)(0[469]|11))(\/)\d{4}$/;

alert(pattern.test(input));