出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01]) 跪求大神解答 这个正则表达式

如题所述

(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])

解释:
(18|19|20)? #表示前两位数可以是18,19或者20,问号?表示重复0次或1次,也就是说是可选的,可以没有,如果没有也能匹配成功。
\d{2} #匹配任意两位数字
(0[1-9]|1[12]) #匹配01-09或者11-12
(0[1-9]|[12]\d|3[01]) #匹配01-09或者10-29或者30-31

总结:
此正则表达式匹配一个6或8位数字
当数字为8位时,前两个数字只能是18-20
倒数3,4位只能是01-09或者11-12
倒数1,2位只能是01-09或者10-29或者30-31

所以这是一个匹配日期的正则表达式,支持YYMMDD的形式,也支持YYYYMMDD的形式。年份为1800-2099,月份为1-9|11-12,日期为01-31
唯一的问题在于,此正则表达式不能匹配月份为10的情况,如果需要修复这个问题,可以修改匹配月份的正则(0[1-9]|1[12])为(0[1-9]|1[0-2])。

最终正则表达式为
(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])
温馨提示:答案为网友推荐,仅供参考
相似回答