0

ユーザーが Web ページのコメント ボックスに html または javascript タグを入力できないようにするための検証式を考え出そうとしています。

以下は、1 行のテキストに対して正常に機能します。

^(?!.*(<|>)).*$

..しかし、ドット (.) のため、改行文字は許可されません。私がこのようなものを使うと:

^(?!.*(<|>))(.|\s)*$

複数の行を許可しますが、式は最初の行の '<' と '>' のみに一致します。どんなラインにもマッチする必要があります。

これはうまくいきます:

^[-_\s\d\w&quot;'\.,:;#/&\$\%\?!@\+\*\\(\)]{0,4000}$

しかし、それは醜く、多言語アプリケーションであるため、一部のユーザーにとっては壊れるのではないかと心配しています.

何か案は?ありがとう!

4

2 に答える 2

1

REは、どのような状況でも、ユーザーが<とに入るのを防ぐことに注意してください。>たとえば、「2>1」。これは非常に望ましくありません。

正規表現を使用してHTMLに一致させようとするのではなく(これはあまり適していません)、単純にエスケープして<、および>に変換し&lt;ます&gt;。または、ホワイトリストを実装してHTMLの限定されたサブセットを許可する、または独自のマークアップ言語をサポートする、選択した言語のパッケージを見つけます(マークダウンは素晴らしいと聞きました)。

はどうかと言うと "。" 改行文字と一致しない場合、一部の正規表現実装は、この動作を制御するためのフラグ(通常、「複数行」の場合は「m」、「単一行」の場合は「s」。後者の場合、「。」は改行と一致します)をサポートします。

最初の2つは基本的にと同等ですが/^[^<>]*$/、これは複数行の文字列で機能します。REをそのように書かなかった理由は何ですか?

于 2010-04-27T21:47:37.690 に答える
0

それで、調べてみたところ、「。」を引き起こす正規表現の.Net 'SingleLine'オプションがあります。改行文字にも一致します。残念ながら、これは ASP.Net RegularExpressionValidator では利用できません。私の知る限り、^(?!. (<\w+>)) のようなものを作成する方法はありません。$ サーバー側の検証を行わずに複数行のテキスト ボックスで動作します。

私はあなたのアドバイスを受けて、サーバー側でタグをエスケープする方法を取りました。これには、検証ページ ディレクティブを 'false' に設定する必要がありますが、この特定の例では、コメント ボックスが実際に心配する唯一のものであるため、大したことではありません。

于 2010-04-29T02:58:50.950 に答える