You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式验证yyyy-mm-dd HH:mm格式及合法输入子串需求

解决日期时间输入的正则验证问题

问题分析

你当前的正则之所以会匹配2022-29这类非法串,核心是各个字段的依赖关系没做约束:正则允许月份部分直接跳过,却把后续的29当成独立的日期字段匹配,但实际上日期字段必须在合法月份之后才能存在。

修正后的正则表达式

^$|^[0-9]{1,4}$|^[0-9]{4}-$|^[0-9]{4}-(0[1-9]|1[0-2])?$|^[0-9]{4}-(0[1-9]|1[0-2])-$|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])?$|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) $|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9])?$|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):$|^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5]?[0-9]$

规则说明

将所有合法的输入子串拆分为独立分支,确保每一步输入都符合逻辑顺序:

  • ^$:匹配空串
  • ^[0-9]{1,4}$:匹配1-4位数字的年份前缀(如202、2022)
  • ^[0-9]{4}-$:匹配年份加分隔符(如2022-)
  • ^[0-9]{4}-(0[1-9]|1[0-2])?$:匹配年份加月份前缀/完整月份(如2022-0、2022-01)
  • ^[0-9]{4}-(0[1-9]|1[0-2])-$:匹配年份-月份加分隔符(如2022-01-)
  • ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])?$:匹配完整年月日前缀/完整日期(如2022-01-2、2022-01-29)
  • ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) $:匹配日期加空格(如2022-01-29 )
  • ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9])?$:匹配日期加小时前缀/完整小时(如2022-01-29 1、2022-01-29 11)
  • ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):$:匹配日期-小时加分隔符(如2022-01-29 11:)
  • ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5]?[0-9]$:匹配完整的yyyy-mm-dd HH:mm格式及分钟前缀(如2022-01-29 11:5、2022-01-29 11:59)

效果验证

  • 合法子串全部匹配:空串、202、2022-、2022-01、2022-01-、2022-01-29、2022-01-29 1、2022-01-29 11:、2022-01-29 11:59等
  • 非法串全部排除:2022-13(月份非法)、222-(年份不足4位)、2024-01-01 23:111(分钟非法)、2022-29(无合法月份直接出现日期)等

内容的提问来源于stack exchange,提问作者GRZa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:31:08