正则表达式不适用于 \ 和 ]

Regular expression not working with \ and ]

我有一个用于验证密码的正则表达式,该密码必须至少为 8 个字符,并且必须包含字母(大写和小写)数字和集合 ^ $ * 中的一个特殊字符。 [ ] { } ( ) ? - " !@ # % & / \ , > < ' : ; | _ ~ ` .

我遇到了 2 个问题,在将 / 添加到 reg exp 后它无法识别(其他字符仍然可以正常工作。如果我添加 /] 以及表达式不再有效(尽管模式似乎一切都无效在浏览器调试模式下就可以了)。

正则表达式字符串

  static get PASSWORD_VALIDATION_REGEX(): string {
    return '(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])' +  // contains lowercase number uppercase
      '(?=.*[\-~$@!%#<>\|\`\\/\[;:=\+\{\}\.\(\)*^\?&\"\,\'])' + // special 
      '.{8,}'; // more than  allowed char
  }

我将正则表达式用作表单验证器和函数中的匹配项

    password: ['', {validators: [Validators.required,
      Validators.pattern(StringUtils.PASSWORD_VALIDATION_REGEX)
        ],
        updateOn: 'change'
      }
    ]
//....
value.match(StringUtils.PASSWORD_VALIDATION_REGEX)

尝试仅使用 (?=.*[\]) 作为特殊字符列表,在这种情况下我收到了控制台错误 Invalid regular expression: /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[\]).{8,}$/: Unterminated character class

对于 '(?=.*[\]])' 没有控制台错误,但在表单验证中存在以下错误 'pattern'

actualValue: "AsasassasaX000[[][]"
requiredPattern: "^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[]]).{8,}$"

相同的值和模式在 https://regex101.com/

上失败

提前感谢您的帮助/建议!

您对模式进行了过度转义,未能正确转义 ] 字符。在 JavaScript 正则表达式中,字符 class 中的 ] 必须转义。

如果您对如何在字符串文字中定义转义感到困惑(这确实令人困惑),您应该使用正则表达式文字。关于与 Validators.pattern 一起使用的正则表达式,要记住的一件事是字符串模式由 Angular 框架通过用 ^$ 包围整个模式来锚定,因此这些锚点将模式定义为正则表达式文字时必须存在。

使用

static get PASSWORD_VALIDATION_REGEX(): string {
    return /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[-~$@!%#<>|`\\/[\];:=+{}.()*^?&",']).{8,}$/;
}

注意 \] 匹配 ] 字符,\ 匹配 [...] 中的 \