正则表达式不适用于 \ 和 ]
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,}$/;
}
注意 \]
匹配 ]
字符,\
匹配 [...]
中的 \
。
我有一个用于验证密码的正则表达式,该密码必须至少为 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,}$/;
}
注意 \]
匹配 ]
字符,\
匹配 [...]
中的 \
。