2011-11-09 5 views
5

私が許可された文字を確認するには、次の方法を持っているでは動作していない許可された文字を確認してください。 -を逃れなければならないのですか?正規表現は、Java

+1

あなたはエスケープしてみませんか? – Simon

答えて

9

内側[ ... ]-シンボルは特別に扱われます。 (あなたがa-zを持っているあなたの式の先頭で、この特別な目的でそれを自分で使用しています。)

あなたは[...]-文字

[a-zA-Z0-9,.;:\-_'\s] 
      ^

または最後(または最初)にそれを置くをエスケープする必要があります

[a-zA-Z0-9,.;:_'\s-] 
       ^

のような表現のいくつかはさらにノート:

  • 技術的には、すべての文字が空の文字列で有効なので、私は+から*に変更します。

  • String.matchesは完全な文字列をチェックするので、^$は冗長です。

  • あなたの全体の方法は、それが文字の範囲として解釈されないように、あなたは文字グループの開始時に-を置くことができます

    return test.matches("[a-zA-Z0-9,.;:_'\\s-]*"); 
    
+0

説明をありがとう:) –

+0

問題はありません。どういたしまして。 – aioobe

+0

文字クラスの一部として 'a-zA-Z0-9_'があるので、代わりに' \ w'を使うように単純化しませんか? '[\\ w、。;:' \\ s - ] * "' – ishnid

1

としてwirttenすることができます。

2

-は、両側に囲まれた文字クラスで、範囲を表す正規表現のメタ文字です。

if (test.matches("^[a-zA-Z0-9,.;:\\-_'\\s]+$")) 
           ^^^ 

またはcharクラスの終わりに-を置く:

if (test.matches("^[a-zA-Z0-9,.;:_'\\s-]+$")) 
            ^

や場所あなたがchar型のクラスで-をエスケープ文字クラス内のリテラル-を一覧表示するには

charクラスの冒頭の-

if (test.matches("^[-a-zA-Z0-9,.;:_'\\s]+$")) 
        ^