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

标签 javascript asp.net regex validation

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

(?=(.*\\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,}) 的长度首先

最佳答案

(?=(.*\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,}$/

这将验证密码至少包含两位数两个字母至少 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 */ }

Edit2:问题的最新更新几乎使我的整个答案无效。 ^^;;

如果您将模式替换为原来的模式,您最终应该仍然能够使用 JavaScript 代码。

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

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

Edit4: 更多阅读: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,}$) 需要放在第一位。

关于javascript - ASP.NET 正则表达式验证器(密码强度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/198974/

相关文章:

javascript - 从 data-* 属性获取计数不起作用,为什么?

javascript - 使用自定义顺序循环遍历 javascript 对象

javascript - 基于表单 ID 或名称的 FormData

c# - 从字符串中删除具有某种模式的子字符串

c# - 使用 C# 在 asp.net 中的 SQL Server 中保存和检索图像

Javascript 正则表达式匹配不起作用

php - Slim 3 将特定的正则表达式配置到路由中

javascript - 如何让 ng-class 与 $dirty 在指令中工作?

asp.net - Entity Framework 和 Oracle - 如何插入 ID?

r - 获取第二个大写字母之前的子字符串