/(?=^.{8,}$)(?=.*[[email protected]#$%^&*-])(?=.*\d)(?=.*\W+)(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
我試圖做出密碼驗證一個正則表達式的特殊字符,使得密碼必須至少8個字符,其中包括一個大寫,一個小寫,一個數字和一個特殊焦炭。它工作正常,但不會將下劃線(_)識別爲特殊字符。即,Pa $$ w0rd匹配,但Pass_w0rd不匹配。思考?正則表達式不承認強調
/(?=^.{8,}$)(?=.*[[email protected]#$%^&*-])(?=.*\d)(?=.*\W+)(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
我試圖做出密碼驗證一個正則表達式的特殊字符,使得密碼必須至少8個字符,其中包括一個大寫,一個小寫,一個數字和一個特殊焦炭。它工作正常,但不會將下劃線(_)識別爲特殊字符。即,Pa $$ w0rd匹配,但Pass_w0rd不匹配。思考?正則表達式不承認強調
正則表達式的這部分似乎是在尋找特殊字符:
(?=.*[[email protected]#$%^&*-])
注意字符類不包括下劃線,試試這個更改爲以下幾點:
(?=.*[[email protected]#$%^&*-])
你還需要修改或刪除該正則表達式的該部分:
(?=.*\W+)
\W
相當於[^a-zA-Z0-9_]
,所以如果下劃線是你唯一的特殊字符,這部分正則表達式會導致它失敗。相反,它更改爲以下(或刪除它,它是多餘的,因爲你已經檢查特殊字符或更早):
(?=.*[^\w_])
完整的正則表達式:
/(?=^.{8,}$)(?=.*[[email protected]#$%^&*-])(?=.*\d)(?=.*[^\w_])(?![.\n])(?=.*[a-z])(?=.*[A-Z]).*$/
糟糕,忘記在我的代碼片段中包含該修訂。它仍然不接受Pass_w0rd :( – user1436111
@ user1436111 - 看到我的編輯,它應該現在工作 –
問題是唯一的事情,根據定義,可能滿足\W
是[a-zA-Z0-9_]
以外的其他東西。下劃線與\W
和Pass_w0rd
沒有任何匹配。
我懷疑有兩個特殊字符的列表和\W
是矯枉過正。挑一個,你很可能會更開心。我還建議把這整個事情分成幾個獨立的測試,以提高可維護性。
,你的作品一個更簡單的正則表達式是這樣的:
/(?=.*[[email protected]#$%^&*-])(?=.*\d)(?!.*[.\n])(?=.*[a-z])(?=.*[A-Z])^.{8,}$/
有在你原來的正則表達式如一些錯誤:
[.\n]
缺失.*
(?=.*\W+)
是多餘的,並且可能沒有達到任何目的非常感謝! – user1436111
這一個這裏工作以及。它通過排除字母數字字符和空格來定義一個特殊字符,所以它包含下劃線:
(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[\d])(?=.*?[^\sa-zA-Z0-9]).{8,}
這似乎適合所有人物。但是不佔空間 –
答案其實很簡單。你沒有在你的特殊字符中加入'_'。 – OmnipotentEntity
這是一些看起來很邪惡的正則表達式。你確定你想用這樣的正則表達式嗎?隨着需求變化,可能難以維持。 –
David B,實際上是因爲這個正則表達式使用了前瞻斷言,所以它對於可維護性來說可能是很好的。每個部分都是模塊化的,不依賴於任何其他部分。 – OmnipotentEntity