1

我正在制作一个程序来检查密码强度。密码必须包含大写字母、小写字母、允许的符号和数字。我已经能够让程序的其余部分工作(使用 re.search(r'[az],password 结构)我将问题区域缩短到这几行但无法让这部分工作。我应该使用与 re.search 有什么不同?

    import re
    symbols = ["!","(",")","£","^"]
    password = input("password")
    if re.search(r'[symbols]',password):
      print("ok")
    else:
      print("no")
4

2 回答 2

0

您快到了。只需在正则表达式范围内指定所有符号:

password_valid = bool(re.search(r'[!()£^]', password))

[..]大多数正则表达式元字符内部,它们失去了特殊含义,只需注意^第一个位置的 和字符类,例如\w.

如果您注意防止这些情况,您可以将符号保留在列表中,并像这样使用它:

symbols = ["!", "(", ")", "£", "^"]
password_valid = bool(re.search(r'[{}]'.format(''.join(symbols)), password))
于 2017-11-05T17:23:03.747 回答
0

完整的解决方案可能是这样的

import re
def is_password_valid(password):
    return bool(re.search('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[+\-*\/])(?=.*[!()£^])', password))

或者更容易理解

import re
def is_password_valid(pas):
    is_ok1 = bool(re.search("[a-z]",pas))
    is_ok2 = bool(re.search("[A-Z]",pas))
    is_ok3 = bool(re.search("[0-9]",pas))
    is_ok4 = bool(re.search("[+\-*\/!()£^]",pas))        
    return is_ok1 and is_ok2 and is_ok3 and is_ok4 
于 2019-11-20T11:38:03.293 回答