日期正则表达式

前言

判断闰年的规则:

1、能被400整除

2、能被4整除不能被100整除

日期正则表达式的构建思想

平年365天,闰年366天,只有在闰年的时候,2月有29天,其余年份,2月总是只有28天,而其余月份是的天数是一样的。那么,只需要对所有的年份(包括闰年)构建出2月只有28天(其余月份正常表示)的正则表达式,(如果此时能够识别出,那么日期就是正常的,如果不能识别出,还有一种可能是闰年的2月29日),所以最后只需用闰年的2月29日的正则表达式与前面的正则表达式相或即可,最后识别不出来的就不是正确的日期。

1.表示所有年份的正则表达式(YYYY) 0000-9999

ordinaryYearRegular = ([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})

2.表示一年中所有31天的日期的正则表达式(MM-DD)

bigMonthRegular = ((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))

3.表示一年中所有30天的日期的正则表达式(MM-DD)

smallMothRegular = ((0[469]|11)-(0[1-9]|[12][0-9]|30))

4.表示二月只有28天的正则表达式(MM-DD)

februaryExceptForTheLastDayRegular = (02-(0[1-9]|1[0-9]|2[0-8]))

5.表示闰年二月第29天的正则表达式(MM-DD)

februaryTheLastDayRegular = (02-29)

6.表示能被4整除不能被100整除的闰年的正则表达式(YYYY)

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

7.表示能被400整除的闰年正则表达式(YYYY)

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

8.最后日期的正则表达式为

//这里只是对日期的简单表示,并不是真正的代码(其中中括号是为了和小括号区分,别看花了眼)
[ordinaryYearRegular + "-" + (bigMonthRegular | smallMothRegular | februaryExceptForTheLastDayRegular)] 
    | [(leapYearRegular1 | leapYearRegular2) + "-" + februaryTheLastDayRegular ]

9.下面是Angular前端中的代码:

    // 所有的年份
    private ordinaryYearRegular: string = '([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})';
    // 大月
    private bigMonthRegular: string = '((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))';
    // 小月
    private smallMothRegular: string = '((0[469]|11)-(0[1-9]|[12][0-9]|30))';
    // 二月前28天
    private februaryExceptForTheLastDayRegular: string = '(02-(0[1-9]|1[0-9]|2[0-8]))';
    // 闰年二月第29天
    private februaryTheLastDayRegular: string = '(02-29)';
    // 能被4整除不能被100整除
    private leapYearRegular1: string = '(([0-9]{2})(0[48]|[2468][048]|[13579][26]))';
    // 能被400整除
    private leapYearRegular2: string = '((0[48]|[2468][048]|[3579][26])00)';
    // 日期的正则化表示
    private dateRegularExpression: RegExp = new RegExp('(' + this.ordinaryYearRegular + '-('
      + this.smallMothRegular + '|' + this.bigMonthRegular + '|'
      + this.februaryExceptForTheLastDayRegular + '))|((' + this.leapYearRegular1 +
      '|' + this.leapYearRegular2 + ')-' + this.februaryTheLastDayRegular + ')');

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值