返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文教会你用正则表达式校验日期时间格式
  • 129
分享到

一文教会你用正则表达式校验日期时间格式

摘要

目录日期部分校验概念验证YYYY年份:验证MMDD月日:时间部分校验校验HHmmss校验HH-mm-ss校验日期+时间部分校验yyyyMMddHHmmss校验 yyyy-M

日期部分校验

概念

首先,我们先了解2个概念:

1、合法的日期范围:

    DateTime 值类型表示值范围在公元(基督纪元)0001 年 1 月 1 日午夜 12:00:00 到公元 (C.E.) 9999 年 12 月 31 日晚上 11:59:59 之间的日期和时间。

2、平年和闰年

地球绕太阳公转一周叫做一回归年,一回归年长365日5时48分 46秒。因此,公历规定有平年和闰年,平年一年有365日,比回归年短0.2422日,四年共短0.9688日,故每四年增加一日,这一年有366日,就 是闰年。但四年增加一日比四个回归年又多0.0312日,400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。由此规定:年份是整百数的必须是400的倍数才是闰年,例如1900年、2100年就不是闰年。

验证YYYY年份:

\d{3}[1-9]|\d{2}[1-9]\d|\d[1-9]\d{2}|[1-9]\d{3}

验证MMDD月日:

大月(1、3、5、7、8、10、12月,有31天)

(0[13578]|1[02])(0[1-9]|[12]\d|3[01])

小月(4、6、9、11月,有30天)

(0[469]|11)(0[1-9]|[12]\d|30)

平年2月(有28天)

02(0[1-9]|[1]\d|2[0-8])

闰年:

能被4整除但不能被100整除的年份

(\d{2})(0[48]|[2468][048]|[13579][26])

能被400整除的年份

((0[48]|[2468][048]|[3579][26])00)

闰年2月(有29天)

((\d{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229

校验yyyyMMdd

最终,验证YYYYMMDD的正则表达式

((\d{3}[1-9]|\d{2}[1-9]\d|\d[1-9]\d{2}|[1-9]\d{3})(((0[13578]|1[02])(0[1-9]|[12]\d|3[01]))|((0[469]|11)(0[1-9]|[12]\d|30))|(02(0[1-9]|[1]\d|2[0-8]))))|(((\d{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)

校验yyyy-MM-dd

精确到日即可,即年月日,格式:yyyy-MM-dd,例如:2016-12-13

((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))

时间部分校验

校验HHmmss

校验时分秒:格式:HHmmss

([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])

校验HH-mm-ss

校验时分秒:格式:HH-mm-ss

([0-1]?[0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9])

校验日期+时间部分

校验yyyyMMddHHmmss

((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])

校验 yyyy-MM-dd HH:mm:ss

校验 yyyy-MM-dd HH:mm:ss(日期和时间之间有一个或多个空格)

((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29))\\s+([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])

应用举例

卫生数据元校验

                     case "D8":
                        if(!value_str.matches("((\\d{3}[1-9]|\\d{2}[1-9]\\d|\\d[1-9]\\d{2}|[1-9]\\d{3})(((0[13578]|1[02])(0[1-9]|[12]\\d|3[01]))|((0[469]|11)(0[1-9]|[12]\\d|30))|(02(0[1-9]|[1]\\d|2[0-8]))))|(((\\d{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)")){
                            valid = false;
                            tipInfo = "不符合日期格式yyyyMMdd";
                            break;
                        }
                        break;
                    case "T6":
                        if(!value_str.matches("([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9])")){
                            valid = false;
                            tipInfo = "不符合时间格式HHmmss";
                            break;
                        }
                        break;
                    case "DT15":
                        if(!value_str.matches("(((\\d{3}[1-9]|\\d{2}[1-9]\\d|\\d[1-9]\\d{2}|[1-9]\\d{3})(((0[13578]|1[02])(0[1-9]|[12]\\d|3[01]))|((0[469]|11)(0[1-9]|[12]\\d|30))|(02(0[1-9]|[1]\\d|2[0-8]))))|(((\\d{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229))(T)(([0-1]?[0-9]|2[0-3])([0-5][0-9])([0-5][0-9]))")){
                            valid = false;
                            tipInfo = "不符合日期时间格式yyyyMMddTHHmmss";
                            break;
                        }
                        break;

参考文章:

https://www.cnblogs.com/Alisa68/p/13208704.html

Https://www.cnblogs.com/yyy-blog/p/10593983.html

总结

到此这篇关于正则表达式校验日期时间格式的文章就介绍到这了,更多相关正则表达式校验日期时间格式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文教会你用正则表达式校验日期时间格式

本文链接: https://lsjlt.com/news/169216.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作