2011-04-29 94 views
3

在過去的4個小時裏,我可能已經閱讀了20多種不同口味的同一個問題,但沒有獲得肯定的結果。用於密碼驗證的Oracle APEX POSIX實現REGEX

我想通過正則表達式在Oracle APEX應用程序中驗證密碼,這對我的理解使用POSIX實現正則表達式,這顯然是比大多數版本的正則表達式更「嚴格」的引擎? (我還沒有能明確證實這一點,但我的測試將導致我相信這是真的)

最終我需要驗證密碼:

  • 是一個字符14和18之間長
  • 至少有1小寫字符
  • 至少有1大寫字母
  • 至少有1位
  • 具有以下特殊字符至少1#$^+ =!*() @%&

我嘗試了幾個正則表達式,即使在他們最簡單的形式不能在Apex實現中工作。

例如:只要它具有ATLEAST 1位,1上的情況下,和1個小寫字符

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$ 

在理論上應該接受任何輸入字符串。使用Javascript RegExp: Regular Expression Tester只需輸入「wS1」即可。它將字符串作爲匹配返回。

如果我使用與正則表達式驗證程序相同的RegExp並在字段中輸入「wS1」,驗證將失敗。

在我需要注意的這個正則表達式的特定實現中是否存在某些我錯過的東西?

編輯

我ultimatley放棄了正則表達式現在由於Apex公司進行驗證廣泛的選擇。

它具有內置的能力,如「表達式1中的項目必須包含[表達式2]」中列出的至少一個字符。不幸的是,它需要我寫多個驗證(我現在達到6)。

在光明的一面是讓我顯示多個錯誤消息,併爲用戶更新他們的新密碼爲用戶滿足需求的錯誤信息被刪除....

總而言之,它仍然感覺對我來說就像是黑客,我仍然對知道正則表達式背後的祕密感興趣。

回答

1

此正則表達式應該爲你工作:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&]).{14,18}$ 

說明:

^      #The Start of the string. 
(?=.*[a-z])   #Any chars and then a lowercase. 
(?=.*[A-Z])   #Any chars and then an uppercase. 
(?=.*\d)    #Any chars and then a digit. 
(?=.*[#$^+=!*()@%&]) #Any chars and then a char from the list. 
.{14,18}    #After matching each of the previous, match 14 to 18 of any char. 
$      #The end of the String. 

(?=)是驗證了這場比賽可以進行,但沒有捕獲任何一個環視組。即在成功之後,它返回到字符串中的前一個位置......在這種情況下,開始是^