2017-10-11 50 views
0

我的公司使用KeePass數據庫來存儲憑證。正則表達式 - 審計密碼的複雜性

我想創建一個這個數據庫的審計,以找到不符合複雜性要求的密碼。

  • 超過10
  • 1大寫
  • 1個小
  • 1號

更長的測試如下:

^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$ 

tooshort 
TooShort 
longerpwd 
LongerPwd 
L0ngerPwd 
l0ngerpwd1 
L0ngerpwd1 

這對 'L0ngerpwd1',因爲它滿足匹配要求。但是,對於審計,我想反轉此查詢以查找其餘部分。

有人可以幫我扭轉這個請嗎?

+0

你的正則表達式是不是因爲'正確。*'在開始失效長度檢查。你至少需要把它解決爲'^(?=。{10,})(?=。* \ d)(?=。* [az])(?=。* [AZ])。* $'或者只是'^(?=。* \ d)(?=。* [az])(?=。* [AZ])。{10,} $'。至於反轉,爲什麼不使用像'!re.test(str)'這樣的編程方法。 –

回答

0

只需更換與消極的積極向前看符號和OR在一起:

^(?:(?!.{10,})|(?!.*\d)|(?!.*[a-z])|(?!.*[A-Z])).*$ 

由於@Wiktor在他的評論中提到的,這另一種是隻否定你目前正密碼正則表達式。但是如果你沒有在應用語言的上下文中使用正則表達式,這可能不是一種選擇。

Demo

+0

太好了,謝謝。 – JDL

+0

@JDL你能標記出這個答案是否正確嗎?答案左邊的綠色複選標記。 –