【发布时间】:2020-06-16 14:57:31
【问题描述】:
我想将 1900-01-01 与 2099-12-31 匹配为以下每种格式:
YYYY
YYYY-MM
YYYY-MM-DD
这是我目前的解决方案:
^(19|20)[0-9]{1}[0-9]{1}-?([0,1]{0,1}[0-2]{0,1}){0,1}-?([0-3]{0,1}[0-9]{0,1}){0,1}
但我的解决方案至少有 4 个我无法修复的严重错误:
-
1921-00匹配成功在我的解决方案中没有限制“月份或日期的 2 位数字中只有 1 位可以为 0,但不能同时为 0”
-
1921-匹配成功我的解决方案中没有“日期的最后一个符号只能是数字,不能是连字符”的限制
-
1921-1匹配成功在我的解决方案中没有限制“月份和日期只能包含 0 或 2 位数字,而不是 1 位数字”
还有主要的:
-
1921-22匹配成功我的解决方案中没有“没有月份就不能存在日期”的限制
我正在使用 Python(如果重要的话)。 如果能在我的解决方案中添加此限制,我将不胜感激。
【问题讨论】:
-
不熟悉python但
[0,1]应该是[01]0或1,逗号允许逗号。要允许月份范围,请使用0[1-9]|1[0-2] -
你预计会遇到 736 年吗?
-
@MonkeyZeus 没有。日期应该在 1900-01-01 到 2099-12-31 之间
-
您对验证闰年日期感兴趣吗? 2010-02-31 呢?
-
事实上,stackoverflow.com/a/8648129/2191572 的范围是 1800-2099,可以轻松调整以满足您的需求。你应该去投票这个答案