2016-09-21 55 views
-3

我需要密碼才能滿足這些要求的Javascript密碼遵守

  1. 密碼必須包含至少8個單詞字符
  2. 必須有至少1個數字位數例如3
  3. 必須至少有2個大寫字符而不是在一個連續的序列

這似乎並不與此

var pos = myPass.value.search(/^([\w.-]{8,})(?=.*\d)((.*?[A-Z]){2,})$/); 

3號工作是最難​​的。

+1

爲什麼這個問題被低估了那麼多?這不是一個有效的問題嗎?我覺得這個問題頗具挑戰性。 –

+0

'SOmething here1'應該失敗嗎?我想是的,但請澄清。試試'/^(?=\D*\d)(?=(?:(?:[||[AZI]+)[AZ]){2}).{8,}$/.test(myPass。值)'。或者,如果您只打算匹配字母,數字,下劃線,點和連字符,請嘗試使用/ ^(?= \ D * \ d)(?=(?:(?:^ | [^ AZ] +)[AZ ]){2})[\瓦特.-] {8,} $ /。試驗(myPass.value)' –

回答

0

你混合消費和非消費模式將限制量詞來匹配序列的消費模式,而你只是需要檢查如果字符串匹配一些限制性的圖案或沒有。要添加這些限制,您需要預覽(?=.*\d)你正則表達式的正確部分,其他都不是。

此外,​​是一個更好的方法來檢查字符串是否匹配。

使用

/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2}).{8,}$/.test(my‌​Pass.value) 

regex demo

或者,只允許字母,數字,下劃線,點和連字符的密碼:

/^(?=\D*\d)(?=(?:(?:^|[^A-Z]+)[A-Z]){2})[\w.-]{8,}$/.test(my‌​Pass.value) 
             ^^^^^^ 

詳細

  • ^ - 串
  • (?=\D*\d)的開始 - 後弦開始0+非數字(\D*),必須有一個數字(\d)(注意,這個先行執行後,正則表達式指數仍處於的字符串的開頭)
  • (?=(?:(?:^|[^A-Z]+)[A-Z]){2}) - 必須有2個序列((?:...){2}):
    • (?:^|[^A-Z]+) - 串或大於大寫字母
    • [A-Z]其它的一個或多個字符的開始 - 向上percase letter。
  • .{8,} - 8個或更多ASCII字母和數字,下劃線,點或連字符
  • $ - - 比在斷行序列
    OR
  • [\w.-]{8,}使用其它任何8個或更多字符的端串。