0

这是正则表达式:

$("#newpassword").keyup(function(e) { 
  var htm = "";
  var pass = this.value;
  var length = this.value.length;

  if (pass) {
    var score = 0;
    if(length >= 8 && length <= 16) { //PASSWORD MIN/MAX NUMBER OF CHARACTERS

      var upper = /[A-Z]/;
      var lower = /[a-z]/;

      var number = /^[0-9]+$/; //PATTERN FOR NUMBERS
      var schar = /[!@#$%^&*?_~+-=<>]/;

      //LOOPS THROUGH PASSWORD TO CHECK FOR AT LEAST ONE OF EACH PATTERN
      for (i = 0; i < length; i++) {
        if (pass.substr(i, 1).match(upper)) {
          var uletters = true;
          score ++;     
          //AT LEAST ONE LETTER EXISTS
        }
        if(pass.substr(i,1).match(lower)) {
          var lletters = true;
          score++; 
          //AT LEAST ONE LETTER EXISTS
        }
        if(pass.substr(i,1).match(schar)) {
          var schar = true;
          score++;
        }
        if(pass.substr(i, 1).match(number)) {
          var numbers = true; 
          var schar = false;
          //AT LEAST ONE NUMBER EXISTS
          score++;
        }
      }
    }
  }
});

任意两个条件为真表示密码ok,但上面的代码 if(numbers == true && schar == true)用户类型只输入数字显示密码ok。

请帮我看看我的代码有什么问题。

4

2 回答 2

1

您不需要遍历密码的每个字符,只需执行以下操作:

score += upper.test(password)?1:0;
score += lower.test(password)?1:0;
score += number.test(password)?1:0;
score += schar.test(password)?1:0;

test返回真或假)然后检查分数。

一般来说,建议不要对用户密码过于严格。如果他们被告知密码应该是什么样子,这会严重损害用户体验。不过,您可以将其作为建议。(例如显示一个条形:弱(红色)- 强(绿色)密码。这比用任何错误消息骚扰用户更有动力。)让他们通过分数 2 或更高。

于 2013-05-13T07:27:00.530 回答
0

您可能可以使用 RegExp.test() 或 RegExp.exec() 在字符串中“查找”正则表达式匹配,而不是自己迭代字符。

function validatePwd (pwd) {
    if (pwd.length < 8)
        return false;
    if (pwd.length > 16)
        return false;

    var upperPatt =  /[A-Z]/;
    var lowerPatt =  /[a-z]/;
    var numberPatt = /[0-9]/;   // FIXED -- this is a better pattern for numbers.
    var scharPatt =  /[!@#$%^&*?_~+-=<>]/;

    score = 0;
    if (upperPatt.test( pwd))
        score++;
    if (lowerPatt.test( pwd))
        score++;
    if (numberPatt.test( pwd))
        score++;
    if (specialPatt.test( pwd))
        score++;

    // don't make it too hard for the poor user, please..  
    //    -- they have to type all this horrible rubbish.
    if (score < 3) {    
        return false;
    }

    // OK.
    return true;
}
于 2013-05-13T07:17:31.213 回答