使用正则表达式来匹配yyyymmdd中的日期格式 [英] Using regex to match date format in yyyymmdd
问题描述
正则表达式应在格式为 YYYYMMDD
的字符串中匹配有效日期。例如, aaa_20150327_bbb
应该匹配,但 aaa_20150229_bbb
不是因为2015年不是闰年。
The regex should match valid dates in a string in the format YYYYMMDD
. For example, aaa_20150327_bbb
should be matched but aaa_20150229_bbb
not because 2015 is not a leap year.
需要考虑从 2000 到 2099 的年份。
推荐答案
总疯狂(0-9999年)
以下(基于此答案)适用于0到9999之间的年份。
Total madness (years 0-9999)
The following one (based on this answer) works for years between 0 and 9999.
(?<!\d)(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(?:(?:(?:0[13578]|1[02])31)|(?:(?:0[1,3-9]|1[0-2])(?:29|30)))|(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))0229)|(?:(?:1[6-9]|[2-9]\d)?\d{2})(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8]))(?!\d)
(查看演示)
如果您希望您简化,只能在2000年至2099年间工作多年。 p>
If you want you can simplify it to only work for years between 2000 and 2099.
(?<!\d)(?:(?:20\d{2})(?:(?:(?:0[13578]|1[02])31)|(?:(?:0[1,3-9]|1[0-2])(?:29|30)))|(?:(?:20(?:0[48]|[2468][048]|[13579][26]))0229)|(?:20\d{2})(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8]))(?!\d)
但是你可以看到它不是那么简单。
But as you can see it's not really more simple.
(查看演示)
为了保持理智,你应该坚持一个非常简单的正则表达式然后使用代码验证它。
To keep your sanity you should stick to a very simple regex and then validate it using code.
(20\d{2})(\d{2})(\d{2})
(检查 demo )
这篇关于使用正则表达式来匹配yyyymmdd中的日期格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!