提问人:nyxtom 提问时间:10/14/2008 最后编辑:Peter Mortensennyxtom 更新时间:8/26/2013 访问量:31279
ASP.NET 正则表达式验证器(密码强度)
ASP.NET Regular Expression Validator (Password Strength)
问:
我有一个验证控件,它具有以下表达式:
(?=(.*\\d.*){2,})(?=(.*\\w.*){2,})(?=(.*\\W.*){1,}).{8,}
该密码至少包含 2 位数字、2 个字母字符、1 个非字母数字和至少 8 个字符。不幸的是,这似乎不符合跨浏览器的要求。
此验证在 Firefox 中完美运行,但在 Internet Explorer 中则不然。
将每个答案组合在一起,可以得到:
var format = "^(?=.{" + minLength + ",})" +
(minAlpha > 0 ? "(?=(.*[A-Za-z].*){" + minAlpha + ",})" : "") +
(minNum > 0 ? "(?=(.*[0-9].*){" + minNum + ",})" : "") +
(minNonAlpha > 0 ? "(?=(.*\\W.*){" + minNonAlpha + ",})" : "") + ".*$";
EX: "^(?=.{x,})(?=(.*[A-Za-z].*){y,})(?=(.*[0-9].*){z,})(?=(.*\W.*){a,}).*$"
重要的部分是拥有 (?.{x,})首先是长度。
答:
现有的基于jQuery的密码强度验证器之一怎么样 - 例如:http://scripts.simplythebest.net/4/Ajax-Password-Strength-Meter-software.html
评论
(?=(.*\W.*){0,})
不是 0 个非字母数字字符。它至少为 0 个非字母数字字符。如果您希望密码不包含任何非字母数字字符,则可以执行 或 .(?!.*\W)
(?=\w*$)
一个更简单的解决方案是跳过前瞻,并使用 .\W
\w{8,}
.{8,}
此外,还包括 .如果你只想要 alpha,你可以做 or .\w
\d
[^\W\d]
[A-Za-z]
/^(?=(?:.*?\d){2})(?=(?:.*?[A-Za-z]){2})\w{8,}$/
这将验证密码是否包含至少两位数字、两个字母、长度至少为 8 个字符,并且仅包含字母数字字符(包括下划线)。
\w
=[A-Za-z0-9_]
\d
=[0-9]
\s
=[ \t\n\r\f\v]
编辑:要在所有浏览器中使用它,您可能需要执行如下操作:
var re = new RegExp("^(?=(?:.*?\\d){2})(?=(?:.*?[A-Za-z]){2})\\w{8,}$");
if (re.test(password)) { /* ok */ }
编辑2:问题的最新更新几乎使我的整个答案无效。^^;;
如果您将模式替换为原来的模式,您最终应该仍然能够使用 JavaScript 代码。
编辑3:好的。现在我明白你的意思了。
/^(?=.*[a-z].*[a-z])(?=.*[0-9].*[0-9]).{3,}/.test("password123") // matches
/^(?=.*[a-z].*[a-z])(?=.*[0-9].*[0-9]).{4,}/.test("password123") // does not match
/^(?=.*[a-z].*[a-z]).{4,}/.test("password123") // matches
在Internet Explorer中似乎不是真正的零宽度。(?= )
http://development.thatoneplace.net/2008/05/bug-discovered-in-internet-explorer-7.html
编辑4:更多阅读:http://blog.stevenlevithan.com/archives/regex-lookahead-bug
我认为这可以解决您的问题:
/^(?=.{8,}$)(?=(?:.*?\d){2})(?=(?:.*?[A-Za-z]){2})(?=(?:.*?\W){1})/
new RegExp("^(?=.{8,}$)(?=(?:.*?\\d){2})(?=(?:.*?[A-Za-z]){2})(?=(?:.*?\\W){1})")
需求是第一位的。(?=.{8,}$)
评论
这将为您提供 2 分钟数字、2 分钟字符和最少 8 个字符长度......我拒绝向您展示如何不允许用户在其密码中使用非字母数字字符,为什么网站想要强制执行安全性较低的密码?
^(?=.*\d{2})(?=.*[a-zA-Z]{2}).{8,}$
评论
下一个:文本区域内的 XHTML 和代码
评论