3

SO がコード ジェネレータではないことはわかっていますが、この RegExp には頭がおかしくなりそうです。HTML にテキストを入力しまし

た。ユーザーが特定のリスト内の要素をダブルクリックすると、入力が自動的に入力されます。 このイベントは、またはのような文字列を生成し、フィールドのカーソル位置に配置します。 このプロセスの最初の目標は、数式構造を構築することです。つまり、大括弧の間に生成された文字列は要素を挿入するので、ユーザーが数字と演算子のみを入力できるようにしたいと考えています。<input /><form />
"[text:number]""[text:number:text]"<input />


keydownイベントをバインドし、文字をテストしようとしましString.fromCharCode(e.which);たが、キー「+」または「-」(およびその他の演算子) の場合、この関数はアルファベット文字を返します。成功せずに。
次に、最終的にkeyupイベントを使用することにしました。次に、RegExp を使用して<input />値を置き換えます。

        $("#inputID").keyup(function(){
            var formule = $(this).val();
            var valid_formule = formule.replace(CRAZY_REGEXP,'');
            $(this).val(valid_formule);
        });


したがって、私の質問は次のとおりです
。JavaScript RegExp をどのように構築して、角かっこで囲まれておらず()+-*/,.、との相違点であるすべての文字を削除するかnumbers
例:
"a[dse:1]a+a[dse:5]a+a[cat:5:sum]a+(a10a/5,5)!"
になります
"[dse:1]+[dse:5]-[cat:5:sum]+(10/5,5)"

アイデアがあれば、私の目標を達成するための別の方法を受け入れます。ありがとう !

4

1 に答える 1

4

次のようなことを試すことができます:

var re = /[^\]\d\(\)+\-*\/,.]+(?=[^\[\]\(\)]*(?:\[|\(|$))/g;
$("#inputID").keyup(function(){
    this.value = this.value.replace(re, "");
});

ただし、括弧内の構造が構文と一貫していることを確認する必要があることに注意してください。

アドバイス: RegExrを使用して正規表現をテストしますが、Javascript 正規表現サポートよりも強力であることを覚えておいてください。

于 2012-07-06T09:15:14.937 に答える