代码之家  ›  专栏  ›  技术社区  ›  nyxtom

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

  •  10
  • nyxtom  · 技术社区  · 17 年前

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

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

    3 回复  |  直到 12 年前
        1
  •  14
  •   Peter Mortensen Pieter Jan Bonestroo    15 年前

    (?=(.*\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代码。

    EdTe3: 好啊。现在我明白你的意思了。

    /^(?=.*[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
  •  1
  •   sontek    17 年前

    这将为您提供2分钟的数字、2分钟的字符和最少8个字符的长度…我拒绝向您展示如何不允许用户在其密码中使用非字母数字字符,为什么网站要强制使用不太安全的密码?

    ^(?=.*\d{2})(?=.*[a-zA-Z]{2}).{8,}$
    
        3
  •  -3
  •   Community Mohan Dere    12 年前

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