javascript - 日期验证年份失败

标签 javascript regex validation

我需要进行日期验证才能接受 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/

相关文章:

javascript - Magento 管理html : "sendMail" is not a function

javascript - 使用 jQuery Validator 插件将 "yes/no"单选按钮验证为特定的正确值

javascript - 如何调整 div 高度以匹配其中图像的高度

javascript - 私有(private)变量和访问父对象

javascript - Angular View 更改重置 $scope 变量

java - 正则表达式 - 使用replaceAll()替换单词但保持大小写

java - Levenshtein Distance 仅在字符串的一部分(Java)

正则表达式约束验证-grails

javascript - PHP + JS 验证不起作用

java - yyyy-mm-dd 的正则表达式日期验证