【发布时间】:2013-07-30 14:09:47
【问题描述】:
我已经构建了一个正则表达式模式来检查密码的强度:
(?=^.{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。 p>
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;
}
}
现在,我的想法已经不多了......
【问题讨论】:
-
评论:像这样的密码验证器对于使用安全随机密码生成器的人来说是一场真正的噩梦。另外,为什么最大长度这么低?无论如何,密码肯定是以散列方式存储的;如果它们更长,会有什么不同?
标签: javascript regex extjs extjs3