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

ASP.NET Regular Expression Validator (Password Strength)

本文关键字:密码 程序 NET 正则表达式 验证 ASP      更新时间:2023-09-26

我有一个验证控件,它有以下表达式:

(?=(.*''d.*){2,})(?=(.*''w.*){2,})(?=(.*''W.*){1,}).{8,}

这是一个密码,至少有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,})。

(?=(.*'W.*){0,})不是0个非字母数字字符。它是至少0个非字母数字字符。如果您希望密码不包含任何非字母数字字符,则可以使用(?!.*'W)(?='w*$)

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

此外,'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代码。

第三版:好的。现在我明白你的意思了。

/^(?=.*[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

看起来(?= )在InternetExplorer中并不是真正的零宽度。

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,}$

一个现有的基于jQuery的密码强度验证器怎么样?比如:http://scripts.simplythebest.net/4/Ajax-Password-Strength-Meter-software.html