正则表达式 判断年月日合法性

使用正则表达式判断年月日是否合法(这里不考虑闰年2月29日的情况)

判断类型为 20151206、19551230、20180808类似这种格式的合法性

其实并不很难,主要思考过程,(答案见末尾):

先确定句子结构:(年月日)

年由4位组成,月和日分别由2位组成

1、年:

    可以分为19开头和20开头,(19开头|20开头)

    19是固定的,后面两位数字都是0-9

    20是固定的,后面两位数字从00-19(今年是19年),即[01][0-9],由此得到判断年的合法性的表达式:

    (19[0-9]{2}|20[01][0-9])

2、月(不考虑2月29号闰年的情况):

    月分为小月大月2月:结构可以是(小月|大月|2月)

    小月由04、06、09、11:(0[469]|11)

    小月有30天:([012][0-9|30])

    组合起来为:(0[469]|11)(012[0-9|30])

    大月直接按照小月改几个数字即可:(0[13578]|1[02])(012[0-9|3[01]])  【这里[012][0-9]会匹配到00,需要优化,其实多写一个类似枚举的值即可,相当于穷举了

   2月为:(02([01][0-9]|2[0-8]))

最后把小月、大月、2月三部分填入句子结构,组合起来,然后把年也加进来,就得到下面一串很长的正则表达式:

(19[0-9]{2}|20([01][0-9]))((0[469]|11)([012][0-9]|30)|(0[13578]|1[02])([012][0-9]|3[01])|(02([01][0-9]|2[0-8])))

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值