日期的正则表达式

时间:2010-11-21 08:34:29

标签: javascript regex

我的日期格式如下: 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 。它仍然会返回我的有效日期。

感谢。

4 个答案:

答案 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");
}