日期的正则表达式解释
以下是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 展开
.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 展开
3个回答
展开全部
您好,((^((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)))
(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)))
展开全部
日期有多种格式:YYYY-MM-DD等
就这个格式而言正则表达式可以表示为:
([0-9]{4})-([0-9]{2})-([0-9]{2})
其中(***)表示一个判别域,判别域中的[0-9]表示集合,即字符由0-9构成,其随后的{*}表示该集合的元素出现的次数为*,而*可以为1,2,或者一个数字4,前者表示出现1次到两次,后者表示一定出现4次。
就这个格式而言正则表达式可以表示为:
([0-9]{4})-([0-9]{2})-([0-9]{2})
其中(***)表示一个判别域,判别域中的[0-9]表示集合,即字符由0-9构成,其随后的{*}表示该集合的元素出现的次数为*,而*可以为1,2,或者一个数字4,前者表示出现1次到两次,后者表示一定出现4次。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 全文搜索,不分大小写。
这样才是年月日。
(^\s*)若干个空白符开始
(\d{4})4个数字,这里只匹配数字没限制范围,不合理。
\/就是分隔日期的/
(0\d|\d|1[12])匹配月份
(\d|\d{2})一位数和两位数,又不合理了,超过31是不行的。
(\s*$)若干个空白符结束
/ig 全文搜索,不分大小写。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询