正则表达式匹配m组中的至少n个

Dan*_*lig 7 javascript regex passwords

我打算写一个正则表达式,只有当一个字符串包含至少n个不同类别的字符时才会匹配.我打算用它强制我的用户创建强密码,并想检查密码是否包含至少3个以下内容:

  • 人物
  • 资本特征
  • 数字
  • 特殊字符

如果所有这些类都存在,则编写匹配的正则表达式使用前瞻是微不足道的.但是,我无法绕过"至少3"部分.这甚至是可能的(在一个漂亮,紧凑的表达式中)还是我必须创建一个怪物表达式?

And*_*ark 6

我认为这将比列出4中的3个的每个可能组合更紧凑.它利用负向前瞻来确保整个字符串不仅仅由您列出的一个或两个字符类组成:

(?!([a-zA-Z]*|[a-z\d]*|[^A-Z\d]*|[A-Z\d]*|[^a-z\d]*|[^a-zA-Z]*)$).*
Run Code Online (Sandbox Code Playgroud)

按顺序,这里的组是:

  • 下部和/或上部
  • 更低和/或数字
  • 更低和/或特殊
  • 上部和/或数字
  • 上部和/或特殊
  • 数字和/或特殊

如果整个字符串(因为$在负前瞻中)仅包含来自任何上述组的字符,则此正则表达式将失败.