求可匹配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
相关产品推荐
相关产品推荐

