如何在 JS 中使 00/00/0000 日期无效

Posted

技术标签:

【中文标题】如何在 JS 中使 00/00/0000 日期无效【英文标题】:How to invalid 00/00/0000 date in JS 【发布时间】:2011-08-23 01:20:02 【问题描述】:

我正在使用 jQuery 验证插件。我使用this post 使用此插件验证我的日期。它正在工作,但有一个问题。它也接受 00/00/0000 日期。如何通过修改以下函数使该日期无效。

$.validator.addMethod(
    "australianDate",
    function(value, element) 
        return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
    ,
    "Please enter a date in the format dd/mm/yyyy"
);

【问题讨论】:

首先您需要确定有效日期应该是什么。例如,11/11/1111 是否有效? 01/01/0001 怎么样。 31/04/2010 怎么样?仅使用正则表达式来验证日期非常困难。上面的正则表达式捕获了大部分的问题,并允许一个相对健全的日期进入系统。如果您需要更强大的验证,您应该编写一些实际尝试解析日期的东西,同时考虑日期、月份和年份的语义,并确定它是否有效。正则表达式只能走这么远。 @Noufal Ibrahim:是的,你是对的,但现在我只想让一个全为零的日期(00/00/0000)无效。感谢您的关心.. @Noufal Ibrahim 是对的,不同的决定导致不同的解决方案 【参考方案1】:

这将确保数据格式正确且日期有效。

$.validator.addMethod(
    "australianDate",
    function(value, element) 
        var tokens =  value.match(/^(\d1,2)\/(\d1,2)\/(\d4)/);

        if (tokens == null) 
            return false;
        

        var date = new Date(tokens[3], --tokens[2], tokens[1]);

        return ! isNaN(date.getTime());

    ,
    "Please enter a valid date in the format dd/mm/yyyy"
);

【讨论】:

不应该是new Date(tokens[2], tokens[1], tokens[0])吗? @James tokens[0] 包含整个匹配项。 jsFiddle. 但是您可能应该从月份中减去 1,因为 javascript 从 0 开始计数。 @alex:我试过了。但它没有在00/00/0000 上显示错误消息。但是当我使用错误的格式时它会显示错误,例如00/0/00。谢谢你的回复。。 噗...我的.split('/').reverse().join('/') 优雅多了! :)【参考方案2】:

你可以试试:

function(value, element)
    return /^\d1,2\/\d1,2\/\d4$/.test(value) &&
        !isNaN(+new Date(value.split('/').reverse().join('/')));

【讨论】:

我将在我的问题中使用它而不是return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/); ??? Date() 构造函数会接受澳大利亚格式的日期,dd/mm/yyy 吗? @cwolves 我们该死的澳大利亚人:P 顺便说一句,我的意思是上面的yyyy :) 另外,+ 不会调用getTime(),它会在无效的时间内返回0,还是我填了一些东西? jsFiddle. @Awan - 是的,这是代替你的功能【参考方案3】:

也许你可以试试这个,也许它可以工作:)

function(value, element) 
        if (!value.match(/^00\/00\/0000$/)) return value;        

【讨论】:

这仍然不会告诉你日期是否有效。事实上,如果输入不是00/00/0000,它将是有效的,对于日期验证来说不是很好。

以上是关于如何在 JS 中使 00/00/0000 日期无效的主要内容,如果未能解决你的问题,请参考以下文章

SQL日期格式显示空白结果(使用jQuery,例如00-00-0000)

如何将字符添加到 pandas 列中的日期或 str?

日期时间值不正确 数据库错误号:1292

如何将时间从 UTC 转换为 EST?

如何在 JSF 2.0 中使会话无效?

1177