Python:带有特殊ch的密码检查器

2024-10-01 00:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个密码检查,我已经指定用户只能使用这3个特殊字符($,&;,!) 特殊=['$','&;','!'] 但当我输入#时,输出仍然是真的 我试过用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,与其他未批准的特殊字符相同,那么接下来该怎么办?你知道吗


Tags: 用户infalse密码returnifnotany
3条回答

这也可以通过正则表达式实现:

[A-Za-z0-9$&!]+$
  1. [A-Za-z0-9$&!]+匹配A-Z范围内的任何大小写字符或任何数字或$&!一次或多次。你知道吗
  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

如果你愿意

我想你希望你的代码看起来像这样:

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.')

我只是使用print语句,因为我不确定它是如何集成到现有代码中的。为了解释,您需要做的只是检查密码中的每个字符是否在您允许的特殊字符列表中。不需要多次检查。你知道吗

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

  1. 普通字母(isalpha)
  2. 数字
  3. “$&;之一”你知道吗

您的代码将分别检查这三个字符,这意味着您首先要测试所有字符是否都是特殊字符之一,然后测试所有字符是否都是普通字母,最后测试所有字符是否都是数字。当然,这种情况永远不会发生,因为数字不可能同时是字母和特殊字符。你知道吗

要解决这个问题,您需要使用or,它将检查您的任何条件是否为真。您还需要将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?

相关问题 更多 >