2012-03-30 6 views
2

以下のRegexチェックがあります。文字、数字、*文字のみを入力します。Regexチェックで '['と ']'を許可する方法

Regex.IsMatch(searchString, @"^[a-zA-Z0-9*]+$") 

しかし、私は、あまりにも() [ ]文字を受け入れるためにそれを拡張したいと思います。これは私が今まで試したことですが、それは間違っています:

Regex.IsMatch(searchString, @"^[a-zA-Z0-9[]()*]+$") 

誰も解決策を提案できますか?

答えて

4
\でそれらをエスケープ

Regex.IsMatch(searchString, @"^[a-zA-Z0-9\[\]()*]+$") 

はエスケープルールは文字が文字クラス内であるかどうかに応じて異なることに留意すべきです(すなわち[_chars_])であるかどうかを判断する。例えば

- それ以外の場合は、基(即ち(_something to capture_))の開始を表すため(は、文字クラスの\(外部に逃げなければなりません。 ?.のような他の文字は、文字クラス外であれば必ずエスケープする必要があります。当然しかし明確に私が詳細に描写しようとすると、それはまだとの混同を引き起こす可能性があり、ことを私に指摘されていますので、私は長期的「文字グループ」の使用を編集した

「グループ」(捕獲/非捕獲)。 Regexは、私が水をさらに濁らせることなく、それほど混乱することはありません。

+0

ありがとう、これは私が探していたものです! –

+0

'['は文字クラスでエスケープする必要はありません。 – Joey

+0

私は理解していますか?[[] 'のように? - 混乱を避けるため、声明を出しておきます。 –

3

あなたは、このように特殊文字をエスケープする必要があります

Regex.IsMatch(searchString, @"^[a-zA-Z0-9\[\]()*]+$"); 
+0

'[]'グループ内で '('または ')'をエスケープする必要はありません。 –

+0

@AndrasZoltanここで角括弧にエスケープはありません。また、 '[]'を確認すると、グループではなく文字クラスを表します。あなたの答えから分かるように、グループは正規表現で全く異なる意味を持ちますが、正しい用語を使用するように注意してください。 – rrrr

+0

@rrrrもともと括弧は\(\)でしたが、不要でした。私は '文字グループ'と '文字クラス'は互換性があると信じています - '[]' *グループ*は文字グループです。しかしおそらく、文字で「グループ」を使用することを避けるのが最善です。混乱を避けてください。 :) –

関連する問題