2015-08-28 119 views
1

大家好,我的密碼應當包含,註冊-Ex的密碼驗證失敗

1. minimum 8 characters 
2. minimum 1 special character 
3. minimum 1 number 

我使用下面的REG-EX,

/^.*(?=.{8,})(?=.*d)(?=.*[A-z])(?=.*[[email protected]#$%^&*? ]).*$/ 

但這並不接受字符串[email protected]這是8個字符長,具有一個特殊字符@並且具有一個數字。我對RegEx知之甚少。你能告訴我這個表達有什麼問題嗎?

回答

3

原因爲什麼字符串不被接受是因爲您忘記了d的斜槓,並且正則表達式要求字母d位於第e字符串。修復是

^(?=.{8,})(?=.*\d)(?=.*[A-Z])(?=.*[[email protected]#$%^&*? ]).*$ 
^    ^^ 

i改性劑使用它。 See demo

[A-z]問題是well-known one。此外,應該刪除最初的.*,否則正則表達式的某些部分將無法正確驗證。

而談到優化:長度檢查幾乎總是可以移動到最後:

^(?=.*\d)(?=.*[A-Z])(?=.*[[email protected]#$%^&*? ]).{8,}$ 

another demo(再次,注意i修改)。

此外,見Fine-Tuning: Removing One Condition

如果你必須檢查n條件,你的模式只需要在包括n-1向前看符號之最。通常情況下,您甚至可以將多個條件合併爲一個預覽。

而至於你的條件與上述(1)最少8個字符,2)最小的一個特殊字符,3)最低1號) - 沒有英文字母要求 - 你甚至可以使用

^(?=.*\d)(?=.*[[email protected]#$%^&*? ]).{8,}$ 
+1

嗯,這將匹配'AAAA2 @ [] AA',因爲'['和']'不在提供的字符類中,所以不能從問題中清楚這是否正確。 – anubhava

2

您可以使用:

^(?=.*\d)(?=.*[a-zA-Z])(?=.*[[email protected]#$%^&*? ])[[email protected]#$%^&*? a-zA-Z\d]{8,}$ 

[A-z]是不正確的,將ASCII內匹配可能更多的字符65-122範圍內像[],`等

RegEx Demo

+0

1.對於'aaaaaaaaaa1!','ABCabc1!'或任何沒有字符'd'的字符串,此表達式失敗。 2.用戶只能在我的要求中輸入沒有大寫字母的小寫字母,但是這個表達式要求字符串有一個小寫字母和大寫字母 – DRB

+1

它實際上是一個來自問題的複製/粘貼錯誤。 'd'應該是數字的'\ d'。現在查看更新的一個。 – anubhava