日期年份验证失败
Year of date validation is failing
我需要做一个日期验证才能接受dd/mm/yyyy格式的它。但是,所有条件都正常工作,除了如果我输入 6 位数字的年份,它也接受它,例如 -
200000/12/12
根据我的代码是有效的。下面是我的代码:
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$/
我认为阅读有关JavaScript使用的正则表达式语法的文档会让您受益匪浅。
在at时,人类往往会在阅读类似字符的长重复序列时遇到问题,就像在你的正则表达式中一样。这个表达式更容易理解,并且做完全相同的事情:
/^'d{2}'/'d{2}'/'d{4}$/
您没有使用开始和停止分隔符限制正则表达式,因此12/12/200000
匹配,因为它与正则表达式匹配,然后是一些
if (!value.match(/^'d'd'/'d'd'/'d'd'd'd$/) )
作为旁注,您不必键入'd
四次,您可以执行'd{4}
来匹配四个'd
实例
如果要通过创建 Date 对象来验证日期字符串,则无需检查整个模式,只需创建 and Date 并检查结果即可。你真的需要两位数的日和月数吗?
如果你想要一个 4 位数的年份,则必须单独检查,因为构造函数会很乐意将两位数的年份转换为 20 世纪。如果您确实需要两位数的日和月,则可以与年份同时检查:
function validateDMY(s) {
var b = s.split(/'D/);
var d = new Date(b[2], --b[1], b[0]);
return d && /^'d{4}$/.test(b[2]) && b[1] == d.getMonth();
}
console.log(validateDMY('30/02/2015')); // false
console.log(validateDMY('30/22/2015')); // false
console.log(validateDMY('02/02/15')); // false
console.log(validateDMY('30/01/2015')); // true
- 添加@javascript标记时,Cucumber中的HTTP身份验证失败
- postmates api的AJAX中的HTTP身份验证失败
- Spring Security中的基本身份验证(身份验证失败消息)
- 同一页面上的多个验证码在提交失败时消失
- 表单验证失败,但仍提交
- ExtJs 4 GridPanel with CellEdit:输入的数据在验证失败时丢失
- 验证失败时禁用按钮
- 即使验证失败,表单也会被提交
- jQuery验证另一个值失败
- 即使验证失败,表单也会提交
- jQuery长度验证失败
- 当表单验证失败时,我将如何最好地处理下一个事件
- 验证失败时阻止表单提交(Angular Material)
- OAuth错误:签名验证失败
- 如果在ASP.Net MVC视图中验证失败,请设置httppostedfilebase
- reCaptcha-验证失败
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- 全局变量设置在JavaScript验证中失败
- 验证用户名和密码失败-客户端会话
- jQuery 在多步骤表单上验证失败后中断