Php 正则表达式日期验证

Php 正则表达式日期验证,php,regex,validation,date,Php,Regex,Validation,Date,我想知道如何将年份设为4位数的必填项 参考: 我的正则表达式做了一些调整,不允许“/”或“.”并且只允许数月: ^(?:(?:31(-)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(-)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(-)(?:0?2)\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[246

我想知道如何将年份设为4位数的必填项

参考:

我的正则表达式做了一些调整,不允许“/”或“.”并且只允许数月:

^(?:(?:31(-)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(-)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(-)(?:0?2)\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(-)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$

考虑到正则表达式的复杂性,要求年份使用4位数字有点棘手,但在我的帮助下,我找到了三个位置,其中a
允许将年份指定为2位或4位数字。通过删除这三个出现的
,年份现在需要包括所有4位数字。否则,前两位数字是可选的

^(?:(?:31(-)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(-)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)\d{2})$|^(?:29(-)(?:0?2)\3(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(-)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)\d{2})$
下面是更新的正则表达式的可视化表示。请注意,三个旁路回路不再出现在年份的前两位数字上


{4,}
是您正在搜索的内容。但是这个正则表达式太复杂了…需要一些时间来找出放在哪里…通过验证
DateTime::createFromFormat
的输出似乎可以更好地解决这个问题。对于纯正则表达式解决方案,我已经修改了正则表达式,使该年的数字为4。尽管如此,正则表达式还是有点复杂。