私はこれを読んで本当に興味を持ちました:正規表現を使用した日付形式の検証
それで、私は自分のバージョンの日付検証関数を書き始めました。私は近いと思いますが、完全ではありません。いくつかの提案とヒントが必要です。関数を微調整するのに多くの時間を費やしました。
import re
import datetime
# Return True if the date is in the correct format
def checkDateFormat(myString):
isDate = re.match('[0-1][0-9]\/[0-3][0-9]\/[1-2][0-9]{3}', myString)
return isDate
# Return True if the date is real date, by real date it means,
# The date can not be 00/00/(greater than today)
# The date has to be real (13/32) is not acceptable
def checkValidDate(myString):
# Get today's date
today = datetime.date.today()
myMaxYear = int(today.strftime('%Y'))
if (myString[:2] == '00' or myString[3:5] == '00'):
return False
# Check if the month is between 1-12
if (int(myString[:2]) >= 1 or int(myString[:2]) <=12):
# Check if the day is between 1-31
if (int(myString[3:5]) >= 1 or int(myString[3:2]) <= 31):
# Check if the year is between 1900 to current year
if (int(myString[-4:]) <= myMaxYear):
return True
else:
return False
testString = input('Enter your date of birth in 00/00/0000 format: ')
# Making sure the values are correct
print('Month:', testString[:2])
print('Date:', testString[3:5])
print('Year:', testString[-4:])
if (checkDateFormat(testString)):
print('Passed the format test')
if (checkValidDate(testString)):
print('Passed the value test too.')
else:
print('But you failed the value test.')
else:
print("Failed. Try again")
質問1:int(myString[3:5])
それが有効かどうかを比較したいときに他の(より良い)方法はありますか?私の方法は非常に反復的であり、この関数には00/00/0000が必要であると感じています。そうしないと、機能しなくなります。したがって、この関数はその意味ではそれほど有用ではありません。特に私が自分を扱う方法は00/01/1989
、単にif
それらが実際にあることを比較しているだけです00
。
質問2:多くのif
声明がありますが、このテストを書くためのより良い方法があるのだろうか?
Pythonでのプログラミングについてもっと知りたいのですが、提案やアドバイスをいただければ幸いです。どうもありがとうございます。