日期的正则表达式解释

以下是java代码中的一段对日期校验的正则表达式,求哪位大神能够详细清晰的解释一下它是怎么实现的.compile("^((\\d{2}(([02468][048])|([... 以下是java 代码中的一段对日期校验的正则表达式,求哪位大神能够详细清晰的解释一下它是怎么实现的
.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
日期的格式是 yyyy-DD-MM,该正则表达式的亮点是能够实现根据年份判断 2月份的 28还是29
展开
 我来答
山水阿锐
2015-04-30 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.2亿
展开全部
您好,((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])

(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9]

|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))

([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9]

|0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3}))

([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1-

9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/

\._])(29)$)|(^([3579][26]00)([-\/\._])(0?2)

([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._])

(0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48])

([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89]

[2468][048])([-\/\._])(0?2)([-\/\._])(29)$)|

(^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/

\._])(29)$)|(^([1][89][13579][26])([-\/\._])

(0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579]

[26])([-\/\._])(0?2)([-\/\._])(29)$))

闰年的2月份有29天,因此匹配闰年日期格式为

YYYY-MM-DD的正则表达式为:

(([0-9]{2})(0[48]|[2468][048]|[13579][26])

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

最后,将平年和闰年的日期验证表达式合并,

我们得到最终的验证日期格式为YYYY-MM-DD

的正则表达式为:

(([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)

DD/MM/YYYY格式的正则验证表达式为:

(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1

[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|

(0[1-9]|[1][0-9]|2[0-8])/(02))/([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}))|(29/02/(([0-9]{2})(0

[48]|[2468][048]|[13579][26])|((0[48]|

[2468][048]|[3579][26])00)))
thebabe
2016-01-29 · TA获得超过829个赞
知道小有建树答主
回答量:729
采纳率:66%
帮助的人:518万
展开全部
日期有多种格式:YYYY-MM-DD等
就这个格式而言正则表达式可以表示为:
([0-9]{4})-([0-9]{2})-([0-9]{2})
其中(***)表示一个判别域,判别域中的[0-9]表示集合,即字符由0-9构成,其随后的{*}表示该集合的元素出现的次数为*,而*可以为1,2,或者一个数字4,前者表示出现1次到两次,后者表示一定出现4次。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a1012144015
2016-01-06 · TA获得超过6415个赞
知道大有可为答主
回答量:9038
采纳率:40%
帮助的人:1349万
展开全部
geti.match(/(^\s*)(\d{4})\/(0\d|\d|1[12])\/(\d|\d{2})(\s*$)/ig)
这样才是年月日。
(^\s*)若干个空白符开始
(\d{4})4个数字,这里只匹配数字没限制范围,不合理。
\/就是分隔日期的/
(0\d|\d|1[12])匹配月份
(\d|\d{2})一位数和两位数,又不合理了,超过31是不行的。
(\s*$)若干个空白符结束
/ig 全文搜索,不分大小写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式