我正在制作一个程序,你可以在其中添加密码到数据库。密码应包含一个大写、一个小写、一个数字和一个特殊字符,并且应介于8到30个字符之间。除特殊角色部分外,其余部分正常工作。我在字符串中放入了一个特殊字符,但我的程序仍然告诉我它没有特殊字符。我不确定我做错了什么:
specialCharacters = "~!@#$%^&*_-+=`|\(){}[]:;'<>,.?/"
def checkPassword(password):
global specialCharacters
errorString = ""
if(len(password) < 8 or len(password) > 30):
errorString = "ERROR: Your password must be between 8 and 30 characters"
print(errorString)
return False
elif(any(char.isalpha() for char in password) == False):
errorString = ("ERROR: password must contain at least letter")
print(errorString)
return False
elif(any(char.isupper() for char in password) == False):
errorString = ("ERROR: password must contain at least one uppercase")
print(errorString)
return False
elif(any(char.islower() for char in password) == False):
errorString = ("ERROR: password must contain at least one lowercase")
print(errorString)
return False
elif(any(char.isdigit() for char in password) == False):
errorString = ("ERROR: password must contain at least one digit")
print(errorString)
return False
for ch in password: /// here is the problem
if ch not in specialCharacters:
errorString = "ERROR: password must contain at least one special character"
print(errorString)
return False
else:
return True
checkPassword("Hellooooo1*") // returns "ERROR: password must contain at least one special character", why?
2条答案
按热度按时间js5cn81o1#
首先,您要检查密码中的每个字符是否不在特殊字符中-如果该字符串中没有出现任何字符,则执行if语句并拒绝密码。
要重新执行此操作,不需要显式循环,可以使用all关键字:
t1qtbnec2#
您的代码中有一个bug。检查特殊字符的最后一个块仅检查第一个字符,但在那里失败。在做出判断之前,您需要遍历整个字符串。