年月日时分秒的正则表达式

近期在搞文件系统的接口bug修复,用于处理用户可能输入各种乱七八糟的时间。为了又搞了一下正则表达式。这里给出了1900-2099年之间的合理时间正则表达式,适用于C++程序。

表达式分解如下,用的时候只需要把注释去掉,把所有内容拼到一行即可,匹配的格式为YYYY/MM/DD hh:mm:ss,年份必须在1900-2099之间(包含)。

(
	(
		((19)|(20)\\d{2})								//1900-2099之间的年份
		/
		(
			(
				(0[13578]|1[02])/(0[1-9]|[12][0-9]|3[01]) //大月份及其可以包含的日期
			)
			|
			((0[469]|11)/(0[1-9]|[12][0-9]|30))			//小月份及其可以包含的日期
			|
			(02/(0[1-9]|[1][0-9]|2[0-8]))				//所有2月份可以包含的日期
		)
	)
	|													//闰年的2月判定条件
	(													//闰年的判定条件
		(
			((19)|(20)\\d{2})(0[48]|[2468][048]|[13579][26]) 	//非整百的年份,19或20开头后两位为:(1)04或08;(2)20、24、28、40、44等;(3)12、16、32、36等
			|
			(2000)			//整百的年份,只有2000年是闰年
		)
		/02/29
	)
)
\\s(0\\d{1}|1\\d{1}|2[0-3]):[0-5]\\d{1}:([0-5]\\d{1})	//时间的判定条件

如果想要非0000-9999之间的正则表达式,则如下:


(
	(
		(\\d{4})								//0000-9999之间的年份
		/
		(
			(
				(0[13578]|1[02])/(0[1-9]|[12][0-9]|3[01]) //大月份及其可以包含的日期
			)
			|
			((0[469]|11)/(0[1-9]|[12][0-9]|30))			//小月份及其可以包含的日期
			|
			(02/(0[1-9]|[1][0-9]|2[0-8]))				//所有2月份可以包含的日期
		)
	)
	|													//闰年的2月判定条件
	(													//闰年的判定条件
		(
			([0-9]{2})(0[48]|[2468][048]|[13579][26]) 	//非整百的年份
			|
			((0[48]|[2468][048]|[3579][26])00)			//整百的年份
		)
		/02/29
	)
)
\\s(0\\d{1}|1\\d{1}|2[0-3]):[0-5]\\d{1}:([0-5]\\d{1})	//时间的判定条件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值