我需要进行日期验证才能接受 dd/mm/yyyy 格式的数据。然而,所有条件都工作正常,除了如果我输入 6 位数的年份,它也会接受它,例如 -
12/12/200000
根据我的代码是有效的。下面是我的代码:
function validate(value) {
if(!value.match(/\d\d\/\d\d\/\d\d\d\d/))
return false;
return checkdate(value);
}
function checkdate(val)
{
var dates = val.split(/\D/);
if(dates[0] <= 0 || dates[0] > 31)
return false;
if(dates[1] <= 0 || dates[1] > 12)
return false;
var now = new Date(dates[2],dates[1]-1,dates[0]);
if (isNaN(now))
return false;
now.setHours(0,0,0,0);
if (now.getFullYear() == dates[2] && now.getMonth() + 1 == dates[1] && now.getDate() == dates[0])
return true;
return false;
}
我不知道为什么它允许年份作为 6 位有效输入?
最佳答案
问题出在 validate
函数中,它匹配的正则表达式允许您不想传递的输入值作为有效值。除了明显的 dd/mm/yyyy
格式之外,它还允许找到的文本位于字符串中的任何位置。基本上,你说它要检查“字符串内是否有所述表达式”,而它应该是“整个字符串是否与该表达式匹配”。
要解决此问题,请在开头添加 ^
并在末尾添加 $
。 ^
代表字符串开始,$
代表字符串结束:
/^\d\d\/\d\d\/\d\d\d\d$/
我认为阅读 documentation 会让您受益匪浅。 JavaScript 使用的正则表达式语法。
在 at 时,人类在读取相似字符的长重复序列时往往会遇到问题,例如在正则表达式中。这个表达式更容易理解并且执行完全相同的操作:
/^\d{2}\/\d{2}\/\d{4}$/
关于javascript - 日期验证年份失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28123438/