使用特殊字符进行Python密码验证 - 避免使用正则表达式

时间:2017-06-25 14:02:50

标签: python validation passwords verification password-checker

对Python来说相对较新,但我还没有在SO上看到过类似的东西。

我正在使用Python构建密码验证器,我已经创建了一些规​​则,如长度,字母数字,大写字母等。我挂断的部分是我需要一个特定的特殊字符集来检查因为也是。我不确定我是否只有语法问题,或者如果我没有构建代码检查部分,但无论我输入什么,似乎总是将特殊字符标记为不在密码中,即使它们是。

我试图按如下方式调出特殊字符列表:

spec= "!@#$%&_="

对于我正在尝试的特殊字符检查,执行工作的部分是针对每个项目(如上所述)的一系列验证检查:

elif not any(s in spec for char in s):
            print ("Password must contain a special character of !@#$%&_=")

程序会运行,但即使使用应该通过的有效密码,也会点击特殊字符打印语句。我相信我会挂在elif +任何语句中,并且语法已关闭。

注意:我想避免使用正则表达式,并使用指定的特殊字符列表。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

修复您将any(s in spec for char in s)替换为any(char in spec for char in s)

要检查密码是否至少包含特殊字符,请执行以下操作:

special_character = "!@#$%&_="

def is_valid(pwd):
    global special_character
    return any(char in spec for char in pwd)    

def is_valid_other_method(pwd):
   global special_character
   return len(set(special_character).intersection(set(pwd))) > 0

print(is_valid('qwerty!'))
# True

print(is_valid('qwerty'))
# False

输出:

True
False

答案 1 :(得分:0)

你走在正确的轨道上。但是,您需要实现最后一个函数。这是您需要的所有代码。

 word = "!@#$%&&^&*"

 def true(pwd))
     global character
     return any(char in spec for char in pwd) 

 def otherthingsthatstrue(pwd):
     global character
     return len(set(character).intersection(set(pwd))) > 0

 print(true('word!')

 print(otherthingsthatstrue('word'))