我建立了一个正则表达式模式来检查密码的强度:
(?=^.{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 个字符的密码:
- 至少 1 个大写字符
- 至少 1 个小写字符
- 至少 1 个数字字符
- 至少 1 个特殊字符/符号
注意:它还强制执行最小和最大长度 {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;
}
}
而现在,我的想法已经不多了......