2

日期格式的正则表达式是什么'01-Aug-12'.

dd-M-y在 asp.net 应用程序中有日期格式,并希望从asp.net regular expression validator control.

4

6 回答 6

5

一个非常基本的格式检查将是:

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

在这里亲自看看。

要实际验证,我们需要像@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}

在此处查看此最终版本。

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

编辑 1:缩短了@Brijesh Gandhi 的一天检查时间,更新了 Regexr 链接。

编辑2:关于正确性的评论。

于 2012-08-24T11:19:50.033 回答
4

为什么是正则表达式?我会使用它来验证它

DateTime.TryParse(...)

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

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

这总比没有好。

于 2012-08-24T11:16:41.533 回答
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-00并且29-Feb-01接受包括闰日 ( 29-Feb-04) 在内的有效日期。请注意,我们假设00代表年份2000,而不是1900。所以,我们接受29-Feb-00了闰日!

在一行中:

看看它在行动

((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);
于 2012-08-24T13:09:18.827 回答
3

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

var myDate = '01-Aug-12​';
var isValidDate = !isNaN( Date.parse( myDate ));
于 2012-08-24T13:56:48.423 回答
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]

于 2012-08-24T11:42:25.537 回答
1

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

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

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

于 2012-08-24T11:24:36.427 回答