2017-10-05 4 views
0

私はユーザー入力フィールドでtxt.replaceをやっています。私は特定の文字のみを許可したいと思うし、ユーザーが入力するように機能がそれらをリアルタイムで置き換えます。私が持っているコードはRegExリアルタイムで逆

txt.value = txt.value.replace(/^[ A-Za-z0-9_\-.]*$/i, ''); 

である。しかし、それは私がしたい文字に一致し、それらを私は望んでいないではない文字を置き換えます。私は他の場所で提案されているように反対のマッチを使ってみました。

txt.value = txt.value.replace(/^(!? A-Za-z0-9_\-.)*$/i, ''); 

しかし、それでも動作していないようです。

txt.value = txt.value.replace(/[^ \w.-]+/, ''); 

\w試合英数字と_(アンダースコア:私は正規表現と''

+0

完全文字列が正規表現 – ventaquil

答えて

1

グローバルフラグ(g必要とされています。

<input type="text" onkeyup="this.value=this.value.replace(/[^ \w-.]/g, '')" />

https://regex101.com/r/Nv3U1w/2/tests正規表現を説明し、テストケースが含まれています。

1

使用否定文字クラス

/[^ \w.-]+/ 

コードとその式に一致しないものを交換することをどのように取りますか)。

あなたはこれがない文字クラス内のすべての文字に一致します

txt.value = txt.value.replace(/[^ a-z0-9_\-.]+/gi, ''); 

を使用する必要があります

<input type="text" onkeyup="this.value=this.value.replace(/[^ \w.-]/, '')" />

1

[^ A-ZA-Z0-9_-。]

注/ regex/gは、1つではなくすべてのマッチが置換されるようにします。

キーは、文字の複数のインスタンスを生成する、抑えることができ、そして keyupイベントのみ後 を発射するので
+0

に一致したときにだけ置き換えられるため、 '^'と '$'は使用しないでください。 'i'フラグを使用する場合、大文字と小文字の両方の範囲は必要ありません。 OPがキーを押すたびに交換されるので、 'g 'も必要ではありません。 – Tushar

関連する問題