首页 > 解决方案 > 列表中的密码检查器

问题描述

我正在尝试构建一个检查密码是否有效的函数。它具有通常的约束条件,包括 - 必须包含大写字母、小写字母、数字和标点符号,我有代码。但是标点符号只能来自给定的列表。标点符号是 !@#$%&()-_[]{};':",./<>?

def password_check(string):
    punct = ['!', '@', '#', '$', '.', '%', '&', '(', ')', '-', '_', '[', ']', '{', '}', ';', "'", ':', '"', ',', '.', '/', '<', '>', '?']
    val = True

    if len(string) < 8:
        val = False             

    if not any(char.isdigit() for char in string):   
        val = False

    if not any(char.islower() for char in string ):
        val = False

    if not any(char.isupper() for char in string):
        val = False

    if not any(char in whitelist for char in string):
        val = False

    if any(char == " " for char in string):
        val = False

    return val

你好世界1!应该返回 True 而 HelloWorld1!* 应该返回 False。如何确保非字母数字字符来自列表?

标签: pythonpasswords

解决方案


这应该工作

def password_check(string):
    whitelist = set("!@#$.%&()-_[]{};':\",./<>?aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789")

    if set(string) <= whitelist:
        #Password is valid
        val = True
    else:
        #Password isnt Valid
        val = False
    return val

推荐阅读