2013-12-18 175 views
2

我有以下的正則表達式語句:正則表達式來檢查字符串包含空格和特殊字符

String PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,12})"; 

我檢查語句,像這樣:

Pattern pattern = Pattern.compile(PASSWORD_PATTERN); 
Matcher matcher = pattern.matcher(password); 
if(!matcher.matches()) { 
    // error 
} 

如何調整這種方式,包括檢查任何空格和特殊字符?如果密碼包含任何空格或任何特殊字符,match()方法將失敗。

+1

使用\\對你是不能給樣本輸入,並且希望正則表達式匹配的內容匹配的空白 –

+1

? –

+0

你可以定義特殊字符嗎? – anubhava

回答

2

如果你只是想拒絕的空格,你可以使用:

(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])\\S{6,12} 

\\S只會匹配非空格。

另外,您可能不需要外部圓括號。

編輯:沒有看到其他部分。

如果您想拒絕特殊字符,您可以將\\S更改爲否定類。使用這個雖然意味着你將不得不使用:[^\\s ... ]

例如,假設不應該有任何?或空白。這將成爲:

(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?]{6,12} 

如果你不想!之一:

(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?!]{6,12} 
+0

我真的很喜歡你的方法。它更清潔,更清晰,在我的回答中可能更快。 +1 – Pshemo

3

正如比賽()如果密碼包含任何空格或特殊字符的方法應該失敗

就像您使用預讀(?=....)來檢查密碼是否包含至少一個

  • 數字(?=.*\\d)
  • 小寫字母(?=.*[a-z])
  • 大寫字母(?=.*[A-Z])

您可以添加負前瞻(?!...),以確保您的密碼將不包含任何想要的字符像

  • 空白(?!.*\\s)
  • 特殊字符(取決於你想要的這裏),例如不能有+-!(?!.*[+\\-!])

現在只要將所有的它在一個模式

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\\s)(?!.*[+\\-!]).{6,12}) 
+0

啊,這是有道理的,這是我一直在尋找。 +1 – invictvs1

+0

@invictvs很高興我能幫忙:) – Pshemo

0

只需添加:

[\w/^\s] 

- \ W檢測用字characte的rs(無特殊字符)。
- ^意味着NOT和\ s用於檢測空白字符。
- 因此,^\ s確保沒有空白。

完全字符串:

"((?=.*\\d)(?=.*\\w)(?=.*[\w/^\s])(?=.*[A-Z]).{6,12})" 
相關問題