【发布时间】:2021-03-12 08:44:15
【问题描述】:
目前正则表达式下面的日期可以正常工作,但我希望它接受那些也有单个数字的日期和月份。我该怎么做?
正则表达式也应该接受以下格式:
“2021 年 11 月 4 日”或“2021 年 1 月 4 日”或“2021 年 1 月 4 日”
dateString = '11/04/2021'
let dateformat = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([1][26]|[2468][048]|[3579][26])00))))$/g;
if(dateString.match(dateformat)){
let operator = dateString.split('/');
console.log(operator)
}
【问题讨论】:
-
我在这里的一般建议是将文本解析为适当的日期并以这种方式进行验证。使用正则表达式验证日期有各种各样的问题,例如二月份有 28 天,闰年除外,它有 29 天。
-
我建议您先拆分字符串,然后使用 3 个不同的正则表达式来匹配每个部分。如果不是至少将那个怪物分成多行。你有 4 个正则表达式,你 |一起。这将减少重复。如果您不需要所有这些捕获组,请使用 (?:...)。我同意蒂姆的观点。使用 Date.parse()。
-
这能回答你的问题吗? Regular Expression | Leap Years and More
-
@TimBiegeleisen 看起来像最后一个正则表达式 (29\/02) 处理闰年。
-
@AllanWind 如果我没看错的话,它承认 任何年的 2 月有 29 天。
标签: javascript node.js regex express