JavaScript验证密码

3

有人能帮我写一个正则表达式来验证以下密码规则吗?

密码需要包含以下五类字符中的至少三类:

  • 英文大写字母(A - Z)
  • 英文小写字母(a - z)
  • 十进制数字(0 - 9)
  • 非字母数字字符(例如:!,$,#或%)
  • Unicode字符

密码长度最少为6个字符。


5
为什么会有人点踩?楼主并不想创建基于Javascript的登录系统,而是只想在用户指定密码时进行简单的验证。 - Pekka
1
一些关于伪强密码的旧评论:http://www.codinghorror.com/blog/2005/07/passwords-vs-pass-phrases.html - Douglas
这对于正则表达式来说并不是一项简单的任务。正如Sachin在他的回答中所建议的那样,编写自己的字符串解析程序并计算是否符合您的标准会更容易些。 - splash
1
不要忘记在服务器端代码中进行验证。JavaScript 很容易被禁用和欺骗。 - BalusC
2个回答

3
更好的处理方法是将每个条件拆分并为每个条件设置一个正则表达式。然后计算输入密码满足了多少条件。这样,您甚至可以告诉用户密码是平均水平、符合标准还是非常强大的。
if (password.length < 6) {
  alert("password needs to be atleast 6 characters long"); 
}

var count = 0;
//UpperCase
if( /[A-Z]/.test(password) ) {
    count += 1;
}
//Lowercase
if( /[a-z]/.test(password) ) {
    count += 1;
}
//Numbers  
if( /\d/.test(password) ) {
    count += 1;
} 
//Non alphas( special chars)
if( /\W/.test(password) ) {
    count += 1;
}
if (count < 3) {
  alert("password does not match atleast 3 criterias"); 
}

不确定如何使用正则表达式匹配Unicode字符。其余所有条件均在上面提供。


1
这是一条注释,而不是答案。(顺便说一句,我完全同意。) - T.J. Crowder

1

[A-Za-z!$#%\d\u0100]{6} 匹配 aS1%eĀ

\u0100 代表 Ā。您可以插入其他需要的 Unicode 代码。您可以在 这里 找到它们。

编辑:对于最少 6 个字符,正确的正则表达式是 [A-Za-z!$#%\d\u0100]{6,}

编辑 2:要包括一系列 Unicode 字符(例如 Latin Extended-B),正则表达式应该像这样:^[A-Za-z!$#%\d\u0100-\u017f]{6,}$。您可以在 这里 找到 Unicode 代码范围。

编辑 3:我开发了一个小函数,用于检查给定的密码是否符合标准。您需要在函数中定义 Unicode 范围。

function isValidPassword(password) {    
    var unicodeRange = "\\u0100-\\u0105";
    var criteria = ["A-Z","a-z","\\d","!$#%",unicodeRange];

    // check whether it doesn't include other characters
    var re = new RegExp("^[" + criteria.join("") +"]{6,}$");
    if(!re.test(password)) return false;

    var minSatisfiedCondition = 3;
    var satisfiedCount = 0;
    for( var i=0; i < criteria.length; i++) {
      re = new RegExp("[" + criteria[i] + "]");
      if(re.test(password)) ++satisfiedCount;

    }
    return (satisfiedCount >= minSatisfiedCondition);
}​

这里有一个可用的示例链接


使用这个正则表达式,您不知道是否至少有3个OP标准匹配。 - splash
@splash:是的,你说得对。我已经编辑了我的答案并加入了一个验证函数。 - Zafer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接