如何在此regex中实现每月正确日期检查[duplicate]

d7v8vwbk  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(130)

此问题已在此处有答案

What is the regex pattern for datetime (2008-09-01 12:35:45 )?(14个答案)
5天前关闭。
我有一个正则表达式,它可以很好地工作的格式,除了它不工作时,每月不正确的日子是在11月31天或2月28天提供

^(([012][0-9])|(3[01]))-([0][1-9]|1[012])-\d\d\d\d [012]{0,1}[0-9]:[0-6][0-9]:[0-6][0-9]$

支持的格式
DD-MM-YYYY HH:MM:SS

i2loujxw

i2loujxw1#

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

让我们来分解正则表达式模式:

  1. 31天以内月份的有效天数:31-(0[13578]|1[02])
  2. 30天以内月份的有效天数:(29|30)-(0[13-9]|1[0-2])
    1.所有其他月份的有效日期,包括非闰年的2月:(0[1-9]|1\d|2[0-8])-(0[1-9]|1[0-2])
    1.闰年中二月的有效天数:29-02-(?:\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)
    1.时间验证:s(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d
    请注意,虽然regex可以在某种程度上用于验证日期,但它仍然不是执行此任务的最佳工具。如果可能的话,我建议使用专用的日期库或内置的语言函数来解析和验证日期。

相关问题