0

<input>コードを作成しましたが、jQueryでHTMLタグを削除しても問題なく動作しています

$("input").on("keypress",function(e){
    var val = $(this).val();
    var open = val.indexOf('<');
    var close = val.indexOf('>');
    if(open!==-1 && close!==-1) {
      $(this).val(val.replace(val.slice(open,close+1),""));
    }
});

デモ: http: //jsbin.com/uzibey/1/edit

しかし、もっと良いアイデアや関数を使用する必要がありますか?

PS:サーバー側のセキュリティは必要ありません。管理領域で使用します。

4

4 に答える 4

3

DOM を使用して入力をサニタイズすることもできます。単純にダミー要素を (ドキュメントに挿入せずに) 作成し、 を使用して入力の値を挿入しますinnerHTML。次に、テキスト ノード以外のすべてのノードを削除します。

これには、正規表現近似ではなく、実際の HTML パーサーを使用して HTML を検出できるという利点があります。ブラウザが HTML 要素として解釈できるものはすべて削除されます。

これは非常に基本的なデモです: http://jsfiddle.net/uA94h/

編集: 上記のデモでは、非テキスト ノードを完全に削除します。リクエストに応じて、要素がテキストに置き換えられるデモを次に示します: http://jsfiddle.net/TknBs/

于 2013-03-19T08:58:29.753 に答える
2

これを試して

$("input").on("keypress",function(e){
    var val = $(this).val();
    var regex = /(<([^>]+)>)/ig;
    var result = val .replace(regex, "");
    $(this).val(result);

});
于 2013-03-19T08:56:13.863 に答える
1

これには正規表現を使用できます

<[^>]*(>|$)

これを入力文字列に適用して、役立つかどうかを確認してください...

于 2013-03-19T08:56:47.643 に答える
1

私は2つの方法を見つけました:

1つはスタックオーバーフローにあります

もう1つはこれです:

var StrippedString = OriginalString.replace(/(<([^>]+)>)/ig,"");
于 2013-03-19T08:59:09.323 に答える