2013-02-13 102 views
1

我需要使用以下條件生成密碼正則表達式:密碼正則表達式

有效密碼必須包含至少8個字符。它必須至少有一個大寫字母,一個小寫字母和一個非字母字符。

到目前爲止,我創造了這個模式:

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,50}) 

但它仍然採取不具有非字母字符的字符串。我怎樣才能做到這一點?由於

+2

「必須至少有一個大寫字母,一個小寫和一個非字母字符。」所以如果有人想要暴力攻擊,你已經減少了大量的可能嘗試次數。誰開始這種做法應該打屁股。對不起,我知道它不回答這個問題,除非你決定不執行這個愚蠢的想法。 – Popnoodles 2013-02-13 17:45:24

+0

你如何使用這種模式?用哪種語言? – Bergi 2013-02-13 17:45:51

+0

不知道你在用哪種口味,很難爲你提供幫助。 [這個其他答案](http://stackoverflow.com/a/2370045/1147918)到一個類似的問題可能會幫助你。 – 2013-02-13 17:53:08

回答

4

你可以試試這個

          |->match 8 or more chars 
             ----- 
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[^a-zA-Z]).{8,}$ 
------------ ---------- --------------- 
     |   |    |->matches further only if there is atleast 1 non alphabetic char 
     |   |->matches further only if there is atleast 1 a-z 
     |->matches further only if there is atleast 1 A-Z 
+0

+1,但'?'在'。*'之後是多餘的。 – Joe 2013-02-13 18:12:28

+0

@Joe是的肯定..感謝您的建議..但我想盡快匹配它......無論哪種方式我們得到正確的答案..但我猜正則引擎必須少做''*工作。 「雖然我們不能說它優化了 – Anirudha 2013-02-13 18:16:20