簡體   English   中英

JavaScript正則表達式?

[英]JavaScript regexp?

這是正則表達式:

$("#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++;
        }
      }
    }
  }
});

任何兩個條件為true表示密碼可以,但是上述代碼if(numbers == true && schar == true)用戶鍵入僅數字即可顯示密碼為OK。

請幫助我代碼中的問題。

您無需遍歷密碼的每個字符,只需執行以下操作:

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返回true或false),然后檢查分數。

通常,建議不要過於限制用戶密碼。 如果告知用戶密碼的外觀,則會嚴重損害用戶體驗。 您可以將其作為建議。 (例如,顯示一個條形:弱(紅色)-強(綠色)密碼。這比通過任何錯誤消息騷擾用戶更能激發他們的積極性。)讓他們通過得分2及更高。

您可能可以使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM