2010-12-08 12 views
0

私は比較的新しいRegularExpressionValidatorについてここで質問しました。すべての英数字、アポストロフィ、ハイフン、アンダースコア、スペース、アンパサンド、コンマ、カッコ、完全停止を受け入れることでした。TextBoxのRegularExpressionValidator

私は与えられた答えはした

"^([a-zA-Z0-9 '-_&,()\.])+$" 

これは、最初は良いように見えたが、他のもの「*」amoung受け入れているようです。

私はここで間違っていることを誰に教えてもらえますか?

+1

これは本当に使用したものですか?あなたはどこかにクローズドパレンズがありません)(最初はオープニングがあり、クローズしません) –

+0

これは間違っています。私は今それを編集しており、それは私が持っているものです。ありがとう! – BigJim

+0

すべての文字が特別な意味を持つ例を挙げるときには、この例を ""囲むべきではありません。実際のバリデーターでこれを使用しているかどうかはわかりません。私はそうは思わない。 – rtpHarry

答えて

2

問題は、エスケープされていない場合は文字クラス内にあり、文字クラスの最後か最初ではない場合は、範囲を示します(A-Zは正規表現の良い例です)。

したがって、'-_も範囲として解釈され、ASCII 39(')とASCII 95(_)の間の文字は()*+,-./0-9:;<=>[email protected][\]^です。

終わりにダッシュを入れて、あなたは問題ないはずです。

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

私は最初の回答で文字クラスを使用しているという事実に踏み込んだので、私は詳細を巡って掘り下げました。 クラスは閉じ括弧ある文字内部http://www.regular-expressions.info/charclass.html

のみ特殊文字や メタ文字で次のチュートリアルの抜粋を発見した(])、 バックスラッシュ()、キャレット(^)と ハイフン( - )。通常のメタ文字 は、文字クラス の中の通常の文字で、 をバックスラッシュでエスケープする必要はありません。

-をエスケープすると\-になります。

+1

文字クラスでも、 –

+0

編集内容はわかりません。どちらか私は\を持っていたはずだった。 – BigJim

+0

@Paulあなたは正しいですか?彼はある期間を探していて、他のキャラクターを見ていたので、見栄えがよいと思っていた。 –

1

あなたの文字クラスはかなり正確ではありません。この部分:'-_は、アポストロフィー文字からアンダースコア文字までの範囲を作成します。 ASCIIテーブルでは、*文字が間に入ります。 「-_問題はで触れた以外に

^([a-zA-Z0-9 '_&,()\.-])+$ 
1

^([a-zA-Z0-9 '\-_&,()\.])+$ 

や、文字クラスの最後として、どこかに「重要でない」、それを動かす:あなたはハイフンをエスケープするか必要がありますあなたはまた、間違った場所に最後に+を持っている他の人。この正規表現で

値のキャプチャグループ:エスプレッソで

^([a-zA-Z0-9 '-_&,()\.])+$ 

は、文字列の最後の文字です。

あなたが正規表現の内部全体をキャプチャしたいなら、入れます(内部でキャプチャされた値を抽出することについて気にされていない場合]のように

^([a-zA-Z0-9 '-_&,()\.]+)$ 

)その後、ドロップ+ストレートの後に()

^[a-zA-Z0-9 '-_&,()\.]+$ 
+1

+1。これはバリデーター用であり、バリデーターはグループのキャプチャーには使用されないので、これらのカッコはまったく役に立たない。 –

関連する問題