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

求可匹配12小时制日期时间格式的正则表达式

问题原因

  • 语法错误:JavaScript 中不能直接用==判断字符串是否匹配正则,你把正则写成了字符串格式和时间字符串做等值判断,逻辑完全错误,正确做法是声明正则对象后调用test()方法执行校验
  • 正则规则不匹配:你编写的正则仅能校验MM/DD/YYYY格式的纯日期内容,没有覆盖你输入字符串中的逗号分隔符、12小时制时分秒、AM/PM标识这些部分,且你输入的月份、日期是单数字(8/3),原正则强制要求月份日期为双数字(必须以0开头),规则不符合需求

正确正则&修正后代码

正则表达式(支持单/双位月份、日期、小时,适配12小时制格式)

/^(0?[1-9]|1[0-2])\/(0?[1-9]|[12]\d|3[01])\/(19|20)\d{2}, (0?[1-9]|1[0-2]):([0-5]\d):([0-5]\d) [AP]M$/

如果需要支持小写的am/pm格式,可以把末尾的[AP]M改成[APap][Mm]。

修正后可运行代码

let startTime = "8/3/2021, 3:40:26 PM"
const timeReg = /^(0?[1-9]|1[0-2])\/(0?[1-9]|[12]\d|3[01])\/(19|20)\d{2}, (0?[1-9]|1[0-2]):([0-5]\d):([0-5]\d) [AP]M$/
if (timeReg.test(startTime)){
    console.log("valid format")
} 
else{
   console.log("in-valid format")
}

正则规则说明

  • 日期部分:支持19/20开头的四位年份,月份范围1-12,日期范围1-31,支持单数字、带前导0的双数字两种写法
  • 时间部分:小时范围1-12(适配12小时制),分钟、秒范围00-59,支持单数字、带前导0的双数字两种写法
    注:该正则仅做格式规则校验,不会校验日期逻辑合法性(如2月30日、4月31日这类不存在的日期也会返回格式合法,需要逻辑合法性校验需额外编写代码判断)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 23:30:03