【发布时间】:2021-07-08 19:58:14
【问题描述】:
我正在制作一个程序,您可以在其中向数据库添加密码。密码应包含一个大写、一个小写、一个数字、一个特殊字符,并且应该在 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?
【问题讨论】:
-
len(set(password).intersection(specialCharacters)) >0 -
'H'不在specialCharacters中。'e'不在specialCharacters中。'l'不在specialCharacters.... -
@Epsi95 我需要在 if 语句中这样做吗?
-
@JohnnyMopp 嗯,好吧,我尝试在 for 循环中切换变量密码和特殊字符,但仍然没有解决它:(。那么“*”不在“密码”中
-
您可以使用第一条评论或类似的方法:
len(set(specialCharacters) & set(password)) > 0。
标签: python if-statement