2011-10-19 41 views
3

這似乎是一個衆所周知的標題,但我真的在這方面遇到問題。Java正則表達式驗證特殊字符

這是我所擁有的以及迄今爲止所做的。

我必須驗證輸入字符串,這些字符是不允許!

&%$ ## @〜

所以我編寫這樣的:

String REGEX = "^[&%$##@!~]"; 
String username= "jhgjhgjh.#"; 
Pattern pattern = Pattern.compile(REGEX); 
Matcher matcher = pattern.matcher(username); 
if (matcher.matches()) { 
    System.out.println("matched"); 
} 
+0

是否有原因使字符類中的##加倍? - 只有一個是必要的,除非你想允許'##'而不是'#' - 這需要一個不同的表達式。 –

+0

我想這是一個拼寫錯誤:) – adgfs

回答

5

改變你的第一行代碼,像這樣

String REGEX = "[^&%$#@!~]*"; 

它應該可以正常工作。字符類外部的^表示行的開始。 ^內的字符類[]意味着字符類中的字符否定。而且,如果你不想匹配的空用戶名,然後使用這個表達式

String REGEX = "[^&%$#@!~]+"; 

+0

基於這個問題,它看起來好像空字符串應該匹配,所以+應該是一個* – smp7d

+0

謝謝,改變它。添加了關於非空用戶名的說明以及清楚說明。 –

2

我想你想的:

[^&%$##@!~]* 
2

要匹配的有效輸入:

String REGEX = "[^&%$#@!~]*"; 

匹配無效輸入:

String REGEX = ".*[&%$#@!~]+.*";