Regex 要匹配类型为ddmmyyyy的日期的正则表达式

Regex 要匹配类型为ddmmyyyy的日期的正则表达式,regex,Regex,我正在尝试匹配以下类型的日期:ddmmyyyy ,例如:04070201 到目前为止,我有: (2)以下几点:::(以下以下以下几点::::(以下以下几点::::(以下以下几点::::(以下以下几点:29 124;30)(以下:(以下以下几点::::(以下以下几点:[1[1,3-3-9-1[1[1,3-3-3-9)1[0-0-2[0-2[0-2[0-2[0-0-0-2])\2])\2)2)2()()));(((以下以下以下::::::((以下以下:::::::::(以下以下以下:::::::::

我正在尝试匹配以下类型的日期:
ddmmyyyy
,例如:
04070201
到目前为止,我有:

(2)以下几点:::(以下以下以下几点::::(以下以下几点::::(以下以下几点::::(以下以下几点:29 124;30)(以下:(以下以下几点::::(以下以下几点:[1[1,3-3-9-1[1[1,3-3-3-9)1[0-0-2[0-2[0-2[0-2[0-0-0-2])\2])\2)2)2()()));(((以下以下以下::::::((以下以下:::::::::(以下以下以下::::::::::::::(:(:(:(:(:(:(:(:(::::::::::::::::::::::::::::[1[1[1[1[1[1[1[1[1[1[1[1[1[| ^(:0?[1-9]| 1\d | 2[0-8])(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2}$


这几乎与相同,但没有分隔符(
(\/\124;-\ 124;\)

您可以使用以下更简单的方法:

^(0[1-9]|[1-2][0-9]|31(?!(?:0[2469]|11))|30(?!02))(0[1-9]|1[0-2])([12]\d{3})$
它捕获日、月、年,并验证除2月29日是否为闰年之外的所有内容。(要做到这一点,我只需对捕获的年份/日期执行数学运算,而不是尝试将其写入表达式)

工作示例:

解释:

- Capture the day: 01-29
    - OR 31, if not succeeded by 02, 04, 06, 09, or 11
    - OR 30, if not succeeded by 02

- Capture the month: 01-12
- Capture the year: 1000-2999 (you could narrow this down 
                               by using number ranges like
                               (1[8-9]\d{2}|20\d{2}) == 1800-2099

正则表达式不是执行此任务的最佳工具

如果可能的话,只要匹配
^\d{8}$
(或者
^\d\d\d\d\d\d$
,如果您的regexp引擎不支持
{8}
语法),然后通过编程检查日期是否有效

更详细地说:

  • 匹配
    ^(\d\d)(\d\d)(\d\d\d\d)$
    (根据需要调整语法)
  • 提取三个匹配的组并以编程方式检查它们是否构成有效日期
  • 后者要求(a)知道每个月的天数,(b)知道哪些年份是闰年(这取决于您使用的日历;公历是一个明显的选择,但请想想它引入之前的年份)

    生成的代码将更易于阅读和维护


    (同样,如果您对格式有任何控制,请考虑使用YYYYMMD而不是DDMYYYY;它排序正确,它是ISO 8601标准指定的格式之一)

    < P>不使用ReGEX验证日期。您的语言可能有一个内置的日期对象,它有自己的方法,您可以将其与您的输入结合使用,您已经用正则表达式验证了输入的格式。

    那么,为什么不从其他问题的答案中删除
    (\/\124;-\)
    ?什么不起作用?我无法匹配上面的示例(在regexpal中尝试过,虽然链接中的答案对dd/mm/yyyy很有效,但当我删除(\/|-|\)时,它仍然不匹配