2013-02-13 19 views
45

我試圖寫一個正則表達式來驗證它們必須符合以下條件的密碼:JavaScript的用於容納至少8個字符,1號,1上部和1個小寫密碼正則表達式

  • 含有至少8個字符
  • 含有至少1數
  • 包含至少1小寫字符(AZ)
  • 包含至少1個大寫字符(AZ)
  • 僅包含0-9A-ZA-Z

我嘗試了以下,但它似乎並沒有工作。

http://jsfiddle.net/many_tentacles/Hzuc9/

<input type='button' value='click' class='buttonClick' /> 
<input type='text' /> 
<div></div> 

和...

$(".buttonClick").click(function() { 

    if ($("input[type=text]").filter(function() { 
     return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/); 
    })) { 
     $("div").text("pass"); 
    } else { 
     $("div").text("fail"); 
    } 

}); 

任何想法?

+0

'只包含0-9A-ZA -Z'是一個非常糟糕的規則 – Endless 2018-01-09 08:59:32

回答

133

你的正則表達式應該是這樣的:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/ 

這裏有一個解釋:

/^ 
    (?=.*\d)   // should contain at least one digit 
    (?=.*[a-z])  // should contain at least one lower case 
    (?=.*[A-Z])  // should contain at least one upper case 
    [a-zA-Z0-9]{8,} // should contain at least 8 from the mentioned characters 
$/ 
+4

這不是做OP(錯誤地,在我看來)要求的。它允許除字母數字之外的其他字符。 – 2013-02-13 09:58:11

+0

感謝您的注意,我解決了它。 – 2013-02-13 10:02:06

+1

工程就像一個魅力! http://www.rubular.com/r/jf69EWPQ4N – Henrik 2013-02-13 10:03:36

2

你的正則表達式只允許8個字符。使用{8,}指定八個或更多,而不是{8}

但是,爲什麼要限制您的密碼允許的字符範圍? 8字符的字母數字密碼可以在幾分鐘內通過我的電話進行強制。

2

至少8 = {8,}

str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/) 
15

使用單獨的正則表達式來測試不同部分會比試圖讓一個單一的正則表達式來覆蓋所有的人都容易得多。它還使添加或刪除驗證標準變得更加容易。

另請注意,您對.filter()的使用不正確;它會一直返回一個jQuery對象(這在JavaScript中被認爲是truthy)。就個人而言,我會使用.each()循環遍歷所有輸入,並報告單個通過/失敗狀態。喜歡的東西下面:

$(".buttonClick").click(function() { 

    $("input[type=text]").each(function() { 
     var validated = true; 
     if(this.value.length < 8) 
      validated = false; 
     if(!/\d/.test(this.value)) 
      validated = false; 
     if(!/[a-z]/.test(this.value)) 
      validated = false; 
     if(!/[A-Z]/.test(this.value)) 
      validated = false; 
     if(/[^0-9a-zA-Z]/.test(this.value)) 
      validated = false; 
     $('div').text(validated ? "pass" : "fail"); 
     // use DOM traversal to select the correct div for this input above 
    }); 
}); 

Working demo

+1

+1使用測試。 – 2014-10-13 14:22:19

相關問題