2015-06-12 55 views
0

我有以下的正則表達式的密碼該^((?=[\S]{8})(?:.*)(?=[A-Z]{1})(?:.*)(?=[\p{S}])(?:.*))$捕獲下列標準正則表達式不接受特定字符

At least 8 chars long 
At least 1 Capital Letter 
At least 1 Special Character 

但是它不接受下列字符:[email protected]#%&*()_-\/,?如何調整正則表達式將這些字符。下面是代碼的示例:https://regex101.com/r/hE2dD2/1 再次感謝

+2

這是否輸入滿足標準3? – Saif

+1

順便說一句,我建議不要嘗試驗證一個正則表達式中的密碼。它比單獨驗證每個規則更容易出錯,這也使得更改規則並告訴代碼中發生了什麼更容易。 – Michelle

+0

@Saif是的,除非你看到一個錯誤Id很高興接受另一個建議 – dames

回答

-1

嘗試這種情況:

^((= [\ S] {8})(?:??)(= [AZ] {1 })(?:。)(?= [\ p {S}] | [^ [A-Za-z0-9] +])(?:。*))$

+0

我試圖添加!@#%&*()_- /,?我已經擁有 – dames

+0

您想要求其中一個還是將它們包含在'至少一個特殊字符'中? – MiiinimalLogic

1

將這些字符添加到地方,它會檢查特殊字符,用適當的轉義:

((?=[\S]{8})(?:.*)(?=[A-Z]{1})(?:.*)(?=[\p{S}[email protected]#%&*()_\-\\\/,?])(?:.*))$ 

但是,如果你不理解正則表達式足以做到這一點的變化,怎麼誰都米是否應該遵循它的代碼?把它分開,簡單的測試就像@Michelle所說的那樣。 Python僞代碼:

if len(password) < 8: 
    print "password too short" 

elif not re.match('[A-Z]', password): 
    print "Password must contain a capital letter" 

elif ... 

這樣,您可以找出失敗的原因並提供更有用的消息。

0

你不必使用\p{S},只要使用這個表達式:

^(?=.*?\p{Lu})(?=.*?[^\p{L}\p{N}\n])\S{8,}$ 

RegEx Demo