繁体   English   中英

Python:具有特殊字符的密码检查器

[英]Python: Password checker with special character

我正在执行密码检查器,我已指定用户只能使用这3个特殊字符($,&,!)special = ['$','&','!']但是当我键入#时,输出为还是对,我尝试使用isdight和isalpha,

if not any(char in special for char in password):
    return ('False')
    val = False

if not password.isdigit():
    return('False')
    val = False
if not password.isalpha():
    return('False')
    val = False

但是情况有所不同,当我指定3个特殊字符$,&,!时。 我输入其中之一,即$,输出仍然为False,与其他未批准的特殊字符相同,那么下一步我该怎么做?

我认为您希望您的代码看起来像这样:

special_chars =  ['$', '&', '!']

password = input("Provide your password: ")    
invalid = False

for char in password:
    if char not in special_chars:
        print('Invalid char found! Use only: {}'.format(special_chars))
        invalid = True
        break
if not invalid:
    print('Valid password.')

我只是使用了打印语句,因为不确定该如何将其集成到您的现有代码中。 为了说明,您需要做的就是检查密码中的每个字符是否都在允许的特殊字符列表中。 无需多次检查。

我假设您正在问如何检查所有字符是否都是:

  1. 普通字母(isalpha)
  2. 数字
  3. “ $&!”之一

您的代码分别检查了这三个字符,这意味着您首先要测试ALL字符是特殊字符之一,然后测试ALL字符是普通字母,最后测试ALL是数字。 自然,情况决不会如此,因为数字也不能同时是字母和特殊字符。

要解决此问题,您需要使用or ,它将检查您的任何条件是否为True。 您还需要将not any(...)更改为not all(...) ,以使它在出现单个错误时不仅仅在所有字符都无法满足我们的条件时失败。 您可以使用str.isalnum()将步骤2和3合并为一个

if all(char in special or char.isalnum() for char in password):
    val = False
    return "False"  # did you mean to return a string here?

这也可以使用正则表达式来完成:

[A-Za-z0-9$&!]+$
  1. [A-Za-z0-9$&!]+匹配AZ范围内的任何大写或小写字符或任何数字或$&! 一或多次。
  2. $匹配字符串的结尾( re.match函数隐式匹配字符串的开头)。

代码:

import re

def test_password(password):
    # use the following statement if you really want to return a string
    # return 'True' if re.match('[A-Za-z0-9$&!]+$', password) else 'False'
    return True if re.match('[A-Za-z0-9$&!]+$', password) else False


print(test_password('abC1!'))
print(test_password(''))
print(test_password('abC1#'))

印刷品:

True
False
False

如果你愿意

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM