我构建了一个正则表达式模式来检查密码的强度:
(?=^.{8,15}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*
它强制用户使用包含以下 4 个类别中至少 3 个字符的密码:
- at least 1 upper case character
- at least 1 lower case character
- at least 1 numerical character
- at least 1 special character / symbol
Note: It also enforces a min and max length {8,15}
该模式在服务器端 PHP 脚本上运行良好,我还使用多个 javascript Regex-tester-tools 对其进行了测试(例如 http://www.regular-expressions.info/javascriptexample.html )。到目前为止一切看起来都很完美...
但是,如果我在简单的 Extjs 文本字段验证器中使用它,则验证器仅在我使用所有 4 个类别时返回 TRUE。
validator: function (value) {
var pattern =
'(?=^.{8,15}$)'+
'((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|' +
'(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|' +
'(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|' +
'(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*';
if (value.match(pattern)) {
return true;
} else {
return this.i18n.invalidPassword;
}
}
现在,我已经没有想法了......
最佳答案
您设置的模式不正确:
var pattern = new RegExp(
'(?=^.{8,15}$)'+
'((?=.*\\d)(?=.*[A-Z])(?=.*[a-z])|' +
'(?=.*\\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|' +
'(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|' +
'(?=.*\\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*'
);
请注意 \\
而不是 \
。如果您不这样做,当正则表达式代码到达时 \
将消失。您也可以使用 native 正则表达式语法,但无法将其分解为多行。
编辑 - 具体来说,是正则表达式中 \d
出现之前的 \\
。如果不使用双反斜杠,则正则表达式只会看到小写的“d”。
关于javascript - 正则表达式模式无法正常工作..但仅在 Extjs/Javascript 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17949388/