使用正则表达式来匹配yyyymmdd中的日期格式 [英] Using regex to match date format in yyyymmdd

查看:1637
本文介绍了使用正则表达式来匹配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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆