【发布时间】:2019-08-26 04:24:08
【问题描述】:
我有一个用于验证密码的正则表达式,该密码必须至少为 8 个字符,并且必须包含字母(大写和小写)数字和 set ^ $ * 中的特殊字符。 [ ] { } ( ) ? - " ! @ # % & / \ , >
我面临 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
对于'(?=.*[\]])',没有控制台错误,但表单验证“模式”中存在以下错误
actualValue: "AsasassasaX000[[][]"
requiredPattern: "^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[]]).{8,}$"
https://regex101.com/ 上的相同值和模式失败
提前感谢您的帮助/建议!
【问题讨论】:
-
您的
^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[]]).{8,}$正则表达式 fails 在 regex101。将[]]替换为\]或\\],甚至] -
使用
return /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[-~$@!%#<>|`\\/[\];:=+{}.()*^?&",']).{8,}$/ -
在我使用
'(?=.*[\]])'的模式中,确实正则表达式失败,传递了php风格(对不起) -
但是你说你用的是JS。或者你在 PHP 中使用它?如果您使用的是 JS,为什么要使用 PHP 设置进行测试?
-
我的建议对你有用吗?
标签: regex angular validation passwords angular7