Regex 不带特殊字符的密码的正则表达式

Regex 不带特殊字符的密码的正则表达式,regex,Regex,我需要使用正则表达式验证密码 密码应至少包含四个字符, 至少一个小写字符 至少一个大写字符 至少一个数字 ^(?=.[0-9])(?=.[a-z])(?=.[a-z])。{4,}$ 我有以上正则表达式工作,但它接受任何特殊字符。我如何拒绝它,请指导单独验证每个规则可能会更容易、更干净 def validate_password(password: str) -> bool: return bool( len(password) >= 4 and

我需要使用正则表达式验证密码

  • 密码应至少包含四个字符,
    • 至少一个小写字符
    • 至少一个大写字符
    • 至少一个数字
^(?=.[0-9])(?=.[a-z])(?=.[a-z])。{4,}$


我有以上正则表达式工作,但它接受任何特殊字符。我如何拒绝它,请指导

单独验证每个规则可能会更容易、更干净

def validate_password(password: str) -> bool: 
  return bool(
        len(password) >= 4 and 
    and re.search(r'[a-z]', password) 
    and re.search(r'[A-Z]', password)
    and re.search(r'[0-9]', password)
    and not re.search(r'[^a-zA-Z0-9]', password)  # exclude non alphanumeric
  )
否则,您可以使用否定的先行断言

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?!.*[^a-zA-Z0-9]).{4,}$

将lookaheads外部的
替换为与您希望接受的字符相匹配的字符类,例如
[0-9a-zA-Z]
(您也可以替换lookaheads内部的
,尽管这不是必需的,但我会检查在有或没有特殊字符的情况下它是否会提高性能)旁白:强制执行这些密码限制通常是个坏主意。您使用的是哪种编程语言或其他框架?正如@James McGuigan的回答所建议的,使用代码组合几个正则表达式会更容易。PS:当我需要更改密码管理器的设置以适应这样的特殊要求时,我觉得很烦人。与其他一些要求相比,您的要求仍然可以接受:DWow我不知道Python中有类型!为什么没有其他人使用它们?从技术上讲,它们只是“类型提示”,这是一种扩展文档的形式,可供IDE、linter、类型检查器和自动完成使用。与Java/Scala不同,它们实际上不是由运行时强制执行的。在Python3中添加了新的内联语法,但在Python2中使用类型注释也可以实现相同的效果。--运行时的类型检查可以使用
isinstance()
,它可以检查原语(int、float、str、bool、list、tuple、dict)和类-