2014-02-13 57 views
1

那麼,必須爲密碼做一個正則表達式。我該如何構造這個正則表達式

密碼應該是5大寫字母和3個數字(可以按任意順序),共8個(5 + 3)

我試試這個

^(.*?(A-Z){5})(.*\d){3} 

但在任何爲了不工作。

希望你們能幫我解決這個問題。

回答

0

你靠近,試試這個:

^(?=(?:.*[A-Z]){5})(?=(?:.*\d){3})[A-Z0-9]{8}$ 
+0

完美的作品,但我想知道爲什麼會有「:」:) – user3306573

+0

@ user3306573:'(?:....)'是一個非捕獲組,請參閱:http:// www.regular-expressions.info/brackets.html – Toto

0

試試這個:

^(?=(.*[A-Z]){5})(?=(.*\d){3}).{8}$ 

Regular expression visualization

Debuggex Demo

說明:

  • ^開始在字符串的開頭
  • (?=...)期待,但不要「」前進又
  • (?:.*[A-Z]){5}只是匹配在字符串中包含5個大寫字母。該(?:的意思是「不抓住這個羣體;在.*意味着‘允許字母字符之間’
  • (?=...)期待,但不要‘’前進又
  • (?:.*\d){3}只是匹配在字符串中包含3數字(?:的意思是「不捕獲這個組; .*的意思是「允許數字之間的字符」。
  • .{8}嚴絲合縫8個字符
  • $匹配的字符串的末尾

實例:

  • 相配:
    • 是abcde123
    • A1J4KLZ8
    • 1ABCDE23
  • 非比賽
    • ABCDEF12(太多字母)
    • ABCD1234(數量太多)
    • ABCDE1234(太多字符)
+0

呃,這是一個很好的解釋,希望在一段時間內像你們一樣。 – user3306573

+0

很高興幫助! –

0

需要這樣的東西密碼不是一件好事,因此你不需要那個正則表達式。

如果你看看所有可能的8個字符密碼,這些都比8char 5upercaseletters 3digits密碼多得多。因此,如果攻擊者知道你的需求(這些需求可能比祕密文檔記載的更多),那麼他可以比沒有這些需求更快速地強制密碼 - 因爲他有更少的密碼候選人可以嘗試。

8個字符沒有限制(數字,上,下,額外的)=(10 + 26 + 26 + X)^ 8點的可能性

計算自己,你有多少可能的密碼有。 :D

+0

是的,但這是一個可能有10個人的內聯網,這就是爲什麼當我使用WEB上的登錄表單登錄網絡時,我會像req Upper,Lower number等一樣。謝謝你的評論! :) – user3306573

相關問題