什么是日期格式'dd-M-y'的正则表达式

时间:2012-08-24 11:14:32

标签: javascript asp.net regex

'01-Aug-12'.

等日期格式的正则表达式是什么

我在asp.net应用程序中的日期格式为dd-M-y,并希望从asp.net regular expression validator control验证它。

6 个答案:

答案 0 :(得分:5)

非常基本的格式检查是:

\d{2}-[A-Za-z]{3}-\d{2} 

亲眼看看here

要实际验证,我们需要像@Brijesh Gandhi建议的一天检查,然后添加一个完整的月份列表:

([12]\d|0[1-9]|3[0-1])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2}

如果您想允许像aug这样的小写月份,可以像这样添加不区分大小写的修饰符?i: ...

([12]\d|0[1-9]|3[0-1])-(?i:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2}

...但这也可以让一个月像aUg - 仅允许第一个字符为大写或小写可能是最正确的。

([12]\d|0[1-9]|3[0-1])-([Jj]an|[Ff]eb|[Mn]ar|[Aa]pr|[Mm]ay|[Jj]un|[Jj]ul|[Aa]ug|[Ss]ep|[Oo]ct|[Nn]ov|[Dd]ec)-\d{2}

请参阅最终版本here

请注意,这仍然无法检测到无效日期,例如30-Feb-12。不接受这些特殊日期的正则表达式会很长/很难看。即使使用Javascript的Date.parse(...) / new Date(...)也无法检测到这些,因为它乐意接受上述不存在的日期,并返回3月1日。因此,为了100%正确,您需要自己进行复杂编码,或使用像datejs这样的库。

编辑1:缩短了@Brijesh Gandhi的日期检查,更新了Regexr链接。

编辑2:备注正确性。

答案 1 :(得分:4)

为何选择regexp? 我会使用

验证它
DateTime.TryParse(...)

无论如何,正则表达式的基本形式可能是

[0-3][0-9]-[A-Z][a-z][a-z]-[0-9][0-9]

这可能比什么都好。

答案 2 :(得分:3)

这不会太优雅,但是如果你想使用正则表达式验证日期,它就在这里:

带有解释的正则表达式

(
  (
    31-(Jan|Mar|May|Jul|Aug|Oct|Dec)|                                   # months with 31 days
    (0[1-9]|[12]\d|30)-(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|   # months with 30 or 31 days
    (0[1-9]|1\d|2[0-8])-Feb                                             # February up to 28th
  )
  -\d\d                                                                 # any two digits represent the year
)|
(
    29-Feb-([02468][048]|[13579][26])                                   # February 29th
)

此正则表达式在接受有效日期(包括闰日(00-Aug-00)时不接受32-Aug-0029-Feb-0129-Feb-04等无效日期。 注意我们认为00代表年2000,而不是1900。所以,我们接受29-Feb-00作为闰日!

在一行中:

in action

((31-(Jan|Mar|May|Jul|Aug|Oct|Dec)|(0[1-9]|[12]\d|30)-(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|(0[1-9]|1\d|2[0-8])-Feb)-\d\d)|(29-Feb-([02468][048]|[13579][26]))

不区分大小写

Javascript中,添加i作为第二个参数:

var re = new RegExp(regexStr, "i");

在ASP.NET中,使用RegexOptions.IgnoreCase

Regex re = new Regex(regexStr,RegexOptions.IgnoreCase);

答案 3 :(得分:3)

正则表达绝对不是这里的方式。我们可以做一个简单的Date.Parse,如果日期无效,则返回NaN

var myDate = '01-Aug-12​';
var isValidDate = !isNaN( Date.parse( myDate ));

答案 4 :(得分:2)

试试这个正则表达式

([1-2][0-9]|[0][1-9]|[3][0-1])-[a-zA-Z][A-Za-z][a-zA-Z]-[0-9][0-9]
根据此正则表达式00-aug-12

[0-3][0-9]-[A-Z][a-z][a-z]-[0-9][0-9]不是有效日期

答案 5 :(得分:1)

以下是日期格式dd-MMM-yy的每种组合的正则表达式:

[0123][0-9]-[JFMASOND][aepuco][nbrylgptvc]-[0-9][0-9]

请注意月份部分过于严格,但您仍可以提供无效日期。也许最好尝试解析日期并检查它是否有效。