2013-07-09 51 views
1

我有一個要求,以確保該字符串只有字母數字或一組字符,如+(),'。 - = 我試着像正則表達式來驗證alpahanumeric或一組特殊字符

String regex = "([a-zA-Z0-9]+)|([\\'|\\()|\\+|\\,|\\-|\\.|\\="]+)"; 
    System.out.println("Regex : " + regex); 

    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(str); 

    if (matcher.matches()) { 
     System.out.println("Match"); 
    } else { 
     System.out.println("Not Matching"); 
    } 

的Bt它不工作,誰能幫助我,請提前

感謝

+0

語法着色清楚地表明你有parenthesing問題。 –

回答

4

它看起來將不包含字母數字的混合整個字符串匹配和由於OR中間的符號。

例如它不會匹配ABCABC()+,但將匹配ABCABC和匹配()+

嘗試:

([a-zA-Z0-9\\'\\(\\+\\)\\,\\-\\.\\=]+) 

希望這有助於!

+2

你應該刪除字符'|'。它不是一個OR,它只是意味着你也匹配字符'|'。我用'([a-zA-Z0-9 \\'\\(\\ + \\,\\ - \\。\\ =)+)'測試過,它能正常工作。 –

+0

看起來很棒。從問題複製/粘貼位!:)將現在更新。 –

+0

非常感謝。它的工作原理:) – user1407668

3

使用下面的正則表達式:

^[-+=(),'.a-zA-Z0-9]+$ 

如果你想允許零長度字符串,替換+*

^[-+=(),'.a-zA-Z0-9]*$ 
+0

@Pshemo,這是有意的,因爲OP寫了'..確保字符串只有字母數字或集合..'。也許我誤解了。(我不擅長閱讀英文) – falsetru

0

看來你有

String regex = "([a-zA-Z0-9]+)|([\\'|\\()|\\+|\\,|\\-|\\.|\\="]+)"; 
編譯問題

因爲你有在]之前的3210結束了String。如果您想在該組字符中包含",則需要將其跳過\"。如果沒有,那就把它從你的正則表達式中移除。

|裏面[...]將使它正常的字符,而不是OR運算符,所以你不需要在這裏使用它。順便說一句,只有需要在[...]中轉義的特殊字符是-


嘗試也許

String regex = "([a-zA-Z0-9]+)|(['()+,\\-.=]+)"; 

,或者如果你想包括"在特殊字符

String regex = "([a-zA-Z0-9]+)|(['()+,\\-.=\"]+)";