当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET正则表达式验证器(密码强度)

如何解决《ASP.NET正则表达式验证器(密码强度)》经验,为你挑选了1个好方法。

我有一个验证控件,其中包含以下表达式:

(?=(.*\\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,})为长度第一.



1> Markus Jarde..:

(?=(.*\W.*){0,})不是0个非字母数字字符.它至少为0个非字母数字字符.如果您希望密码不包含任何非字母数字字符,您可以执行(?!.*\W)或者(?=\w*$).

一个更简单的解决方案是跳过\W前瞻,而\w{8,}不是使用.{8,}.

\w包括\d.如果你只想要alpha,你可以做[^\W\d]或者[A-Za-z].

/^(?=(?:.*?\d){2})(?=(?:.*?[A-Za-z]){2})\w{8,}$/

这将验证密码是否包含至少两个数字,两个alpha,长度至少为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,}$)需求是第一位的.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有