捕获多达三种不同类型的日期?

Capture up to three different kinds of dates?

我这里有这个正则表达式

^([12]\d{3})(?:[.](10|11|12|(?:0[1-9]))(?:[.](30|31|(?:0[1-9])|(?:[12]\d)))?)?$

目的是捕获:yyyy、yyyy.mm 或 yyyy.mm.dd 作为输入字段的有效日期字符串。它做得很好,然而,事实证明它需要反过来。

我试图扭转这个过程,但我总是做空,无法完全弄清楚。我如何让它捕获:yyyy、mm.yyyy 或 dd.mm.yyyy 作为有效日期字符串?

(应该提到正则表达式对我来说本质上是神奇的。我不是很直观地理解它。)

正如评论中所指出的,最好使用其他工具而不是正则表达式来检查日期有效性。 我建议使用以下正则表达式:
^((\d{2})\.)?((\d{2})\.)?(\d{4})$
其中第 2、4、5 个捕获组分别对应 dd、mm 和 yyyy。

之后您可以检查这些值的有效性。

如果您仍然想完全使用一个正则表达式来完成,您可以使用以下方法:
^((30|31|[012]\d)\.)?((11|12|0\d)\.)?(\d{4})$
但仍然没有涵盖2月29日的问题,也没有涵盖30/31天月份的匹配。