Python 正则表达式验证传统日期

Pure regular exprssion

(?x)(?:
(?#dd/mm)
(3[0-1]|[12][0-9]|0?[0-9])/(1[0-2]|0?[1-9])
|
(?#mm/dd)
(1[0-2]|0?[1-9])/(3[0-1]|[12][0-9]|0?[0-9])
)
/
(?#yy or yyyy)
(?:[0-9]{2})?[0-9]{2}

Regex with procedural code

def dateCheck(sDate):

    import re

    daysinmonth = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    validdate = 0
    match = re.search("^(?P<month>[0-3]?[0-9])/(?P<day>[0-3]?[0-9])/(?P<year>[0-9]{4})$", sDate)
    if match:
        month = int(match.group("month"))
        day = int(match.group("day"))
        year = int(match.group("year"))

        if year < 50:
            year += 2000
        if year < 100:
            year += 1900

        if month == 2 and year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
            if day >= 1 and day <= 29:
                validdate = 1
        elif month >=1 and month <= 12:
            if day >=1 and day <= daysinmonth[month-1]:
                validdate = 1

    if validdate == 0:
        print 'date <%s> is invalid!' % sDate
    else:
        print 'date <%s> is valid!' % sDate

def main():
    while 1:
        sDate = raw_input("Please input date (format is mm/dd/yyyy, exit to quit): ")
        if sDate == 'exit':
            break
        else:
            dateCheck(sDate)

main()



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值