1. 程式人生 > >Python 正則表示式驗證傳統日期

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()