如何在 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 日期无效的主要内容,如果未能解决你的问题,请参考以下文章