在Python中格式化卡到期日验证器

2024-10-03 06:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好!

我的python代码有一个相当大的问题,我已经尝试解决它好几天了,但我不能让它工作。我正在为学校的作业提供网上购物服务。我正在尝试创建一个信用卡验证器。我的问题是,当我有一个条目供用户输入其到期日期时,我试图以这种方式格式化它,例如01/20或11/23。我试图使它自动添加/斜杠。因此,当用户输入12时,它将自动添加/

到目前为止,我正在跟踪输入框中何时有更改,以便它知道何时添加斜杠。不幸的是,我的格式有问题。因此,当输入为12/21且用户删除第一个“2”字符时,输入变为:

enter image description here

我有时可以看到这些结果:

enter image description here

或类似的:

enter image description here

这是我使用的代码。你有没有发现任何错误,或者有没有有效的方法?你知道吗

def validateDate():
    global entryDateCard,dateCard    ##entryDateCard is just Entry ID, dateCard is the expiry date
    print("bbb")

    if (len(entryDateCard.get())==5):
        print("ccc")
        entryDateCard.insert(0,dateCard)
    dateCard = entryDateCard.get()

    if (2<=len(entryDateCard.get())<=4 and (entryDateCard.get().find("/")!=2)):  ## does not work even when true
        print("aaa")
        dateCard.replace("/","")
        entryDateCard.delete(0,"end")
        entryDateCard.insert(0,dateCard)
        entryDateCard.insert(2,"/")

    if(len(entryDateCard.get())>5):
        entryDateCard.delete(0,"end")
        entryDateCard.insert(0,dateCard[:5])
        dateCard = dateCard[:5]

EDIT1:尝试过这个,但仍然不起作用(发布整个代码片段)

import tkinter
w = 1280
h = 720
canvas = tkinter.Canvas(width=w,height=h,bg="#71CAE7")
canvas.pack()


entryDateCard=0
dateCard=""


cardDateSV=tkinter.StringVar()
cardDateSV.trace("w", lambda name, index, mode, sv=cardDateSV: validateDate())
entryDateCard = tkinter.Entry(width=15,font = "Helvetica 15 bold",textvariable=cardDateSV)
entryDateCard.pack()
entryDateCard.place(x=(w//2)-275,y=h-(0.61*h),height=30)


def validateDate():
    global entryDateCard,dateCard
    dateCard = entryDateCard.get()
    if (len(dateCard.replace("/",""))==2):
        entryDateCard.insert(2,"/")
        print("two")
    elif (len(dateCard.replace("/",""))==3):
        entryDateCard.delete(0,"end")
        entryDateCard.insert(0,dateCard[:2])
        entryDateCard.insert(2,"/")
        entryDateCard.insert(3,dateCard[3:4])
        print("three")
    elif (len(dateCard.replace("/",""))==4):
        entryDateCard.delete(0,"end")
        entryDateCard.insert(0,dateCard[:2])
        entryDateCard.insert(2,"/")
        entryDateCard.insert(3,dateCard[3:5])
        print("four")
    elif (len(dateCard.replace("/",""))>=5):
        print("max")
        entryDateCard.delete(0,"end")
        entryDateCard.insert(0,dateCard[:5])
        dateCard = dateCard[:5]



Tags: 代码用户getleniftkinterdeletereplace