def chkDay(x, size, part):
dayre = re.compile('[0-3][0-9]') # day digit 0-9
if (dayre.match(x)):
if (len(x) > size):
return tkMessageBox.showerror("Warning", "This "+ part +" is invalid")
app.destroy
else:
tkMessageBox.showinfo("OK", "Thanks for inserting a valid "+ part)
else:
tkMessageBox.showerror("Warning", part + " not entered correctly!")
root.destroy
#when clicked
chkDay(vDay.get(),31, "Day")
#interface of tkinter
vDay = StringVar()
Entry(root, textvariable=vDay).pack()
问题:
答案 0 :(得分:5)
使用正则表达式验证日期很难。您可以使用以下某些模式:http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1
请记住,检查年份是否飞跃尤其困难,例如2011-02-29日期是否有效?
我认为最好使用专门的函数来解析和验证日期。您可以使用strptime()
模块中的datetime
。
答案 1 :(得分:2)
让标准datetime
库处理您的日期时间数据以及解析:
import datetime
try:
dt = datetime.datetime.strptime(date_string, '%Y-%m-%d')
except ValueError:
# insert error handling
else:
# date_string is ok, it represents the date stored in dt, now use it
答案 2 :(得分:1)
31实际上是你的正则表达式,因为[0-3] [0-9]并不是你想要的。 您最好尝试将其强制转换为int并明确检查其边界。 否则正确的正则表达式将是([0-2]?\ d | 3 [01])以匹配0到31之间的数字
答案 3 :(得分:0)
为了限制1到31之间的值,您可以使用:
[1-9]|[12][0-9]|3[01]