我的日期格式如下: YYYY-MM-DD ,因为我们都知道月份只包含 01,02,03,04,05,06,07等数字,08,09,10,11,12 。我怎样才能真正编写一个正则表达式,只允许我获得正确的月份和日期。我只能这样做......
var date = /[0-9]{4}\-[0-9]{2}\-[0-9]{2}/;
function checkDate(Date)
{
if (date.test(Date))
{
alert("Valid Date");
}
else
{
alert("Invalid Date");
}
}
因此,如果日期是例如 2008-24-43 。它仍然会返回我的有效日期。
感谢。
答案 0 :(得分:6)
使用正则表达式解析日期可能是一项具有挑战性的任务。我建议你改为datejs。
答案 1 :(得分:3)
以下正则表达式匹配1900-01-01和2099-12-31之间的yyyy-mm-dd格式的日期,可选择四个分隔符: - /。和白色空间。
/^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$/
来源:www.regular-expressions.info
答案 2 :(得分:2)
我建议不要使用正则表达式去那条路。你会遇到比需要更多的问题。相反,请阅读this post以了解人们之前尝试过的内容。
您应该使用new Date()
来检查输入的日期是否真的有效。不要重新发明轮子。
对于您的示例,您可以使用此:
var strDate = "2008-07-23";
var dateParts = strDate.split("-");
var date = new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
免责声明:从链接页面获取的想法。
如果日期无效,您可以使用this post中的策略。
答案 3 :(得分:0)
这将为您提供基本的检查:
^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$
但它仍然允许像2001-02-29这样的东西。你可能最好做一个两阶段的过程 - 首先做正则表达式的速度,然后使用DateTime.Parse:
try
{
DateTime.Parse(Date);
alert("Valid Date");
}
catch (FormatException)
{
alert("Invalid Date");
}