【问题标题】:How to invalid 00/00/0000 date in JS如何在 JS 中使 00/00/0000 日期无效
【发布时间】: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 是对的,不同的决定导致不同的解决方案

标签: javascript jquery validation date datepicker


【解决方案1】:

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

$.validator.addMethod(
    "australianDate",
    function(value, element) {
        var tokens =  value.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})/);

        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 /^\d{1,2}\/\d{1,2}\/\d{4}$/.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,它将是有效的,对于日期验证来说不是很好。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 2010-11-21
  • 2017-09-21
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多