2013-02-12 47 views
3

我目前正在實施身份管理解決方案,該解決方案將爲用戶提供管理其所有端點帳戶的能力。正則表達式排除特定字符串

目前,我們公司的密碼策略符合默認的Windows要求:必須包含數字或特殊字符等。

不幸的是,在新系統的密碼策略中,我們可能需要一個數字,一個特殊數字或兩者,但不是「其中之一」。但是,新系統允許通過正則表達式進行驗證。

目前,我們有這個設置爲禁止以下的正則表達式:

.*[pP][aA4][sS$]{2}[wW][oO0][rR][dD].* 

這工作得很好。不過,我們希望將此更改爲允許一位數字或一個特殊字符,同時還要DISALLOWING前一個。這裏是我曾嘗試過的:

((?=.*\d.*)|(?=.*[-'"!#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\].*))(?!.*[pP][aA4][sS$]{2}[wW][oO0][rR][dD].*) 

但是,我無法得到這個工作。數字/特殊組可以正常工作,但單詞組不會。它確實看到在字符串的END處是否使用「密碼」或一些變體,但不在開始處...

有什麼建議嗎?系統使用標準(Perl風格)正則表達式。

+0

我是否正確理解這一點,您必須使用數字或特殊字符,但不允許使用數字和特殊字符? – Eric 2013-02-12 22:48:58

+0

您必須使用數字或特殊字符,但如果您願意,您可以同時使用這兩種字符。正則表達式的那部分工作正常。我特別尋找關於排除「密碼」位的答案。 – vermi 2013-02-12 22:52:39

+0

你可以依次測試2個不同的正則表達式嗎?首先你要測試一般條款的允許性。第二個正則表達式會匹配禁止的模式 - 如果是,則拒絕。 – collapsar 2013-02-15 16:36:51

回答

0

通過一些技巧,可以結合你的正則表達式。

^([^pP\d!\-'"#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\]|[pP](?![aA4][sS$]{2}[wW][oO0][rR][dD]))*(\d|[-'"!#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\])([^pP\d!\-'"#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\]|[pP](?![aA4][sS$]{2}[wW][oO0][rR][dD]))*$ 

我已經成功地在Sublime文本編輯器中測試過了。

+0

謝謝mrhobo;我最終將這個任務交給了一個承包商,但我已經測試了你的解決方案,而且看起來工作正常。我將把這標記爲可接受的解決方案。 :) – vermi 2013-06-03 23:34:59

+1

應該已經傳遞給我然後:) – 2013-06-04 06:54:36

相關問題