Regex 日期正则表达式似乎无法获得强日期正则表达式

Regex 日期正则表达式似乎无法获得强日期正则表达式,regex,Regex,我研究日期正则表达式已经有一段时间了,但每当我提出一个正则表达式时,似乎总是有一个问题 表达方式如下 ^(0?[1-9]|[12][0-9]|3[01]) 关于DDMMM格式的日期正则表达式是什么样子的,有什么帮助吗?我从某处阅读了下面的示例 假设我们想匹配mm/dd/yy格式的日期,但我们想让用户选择日期分隔符。 快速解决方案是\d\d\d\d\d。一开始看起来不错 \d\d[-/.]\d\d[-/.]\d\d是一个更好的解决方案。这个正则表达式允许破折号、空格、点和正斜杠作为日期分隔符 这

我研究日期正则表达式已经有一段时间了,但每当我提出一个正则表达式时,似乎总是有一个问题

表达方式如下

^(0?[1-9]|[12][0-9]|3[01])

关于DDMMM格式的日期正则表达式是什么样子的,有什么帮助吗?

我从某处阅读了下面的示例

假设我们想匹配mm/dd/yy格式的日期,但我们想让用户选择日期分隔符。 快速解决方案是
\d\d\d\d\d
。一开始看起来不错

\d\d[-/.]\d\d[-/.]\d\d
是一个更好的解决方案。这个正则表达式允许破折号、空格、点和正斜杠作为日期分隔符

这个正则表达式还远远不够完美。它匹配99/99/99作为有效日期

[0-1]\d[-/.][0-3]\d[-/.]\d\d
领先了一步,尽管它仍将与1999年9月39日相匹配

还是比较好的,

[0-1][1-9][- /. ]?(0[1-9]|[12][0-9]|3[01])[- /.]?(18|19|20|21)\d\d$

我提出了这个,很长,但它涵盖了大多数情况,除了闰年:

^((0[1-9]|[12][0-8])[/.-](0[1-9]| 1[0-2]))((29 | 30)[/.-](0[13-9]| 1[0-2])|(31[/.-](0[13578]| 1[02])$

  • 每个月有28天(您必须在代码中使用某种函数检查闰年)

    (0?[1-9]|[12][0-8])
    #天:01至28

    [/.-]
    #分隔符

    (0[1-9]| 1[0-2])
    #月份:1至12

  • 除2月外,每个月有29天和30天:

    (29 | 30)
    #天:29或30

    [/.-]
    #分隔符

    (0[13-9]| 1[0-2])
    #月份:1、3到12

  • 只有一些月份有31天:(1月、3月、5月、7月、8月、10月和12月)

    31
    #天数:31

    [/.-]
    #分隔符

    (0[13578]| 1[02])
    #月份:01,03,05,07,08,10,12