2017-06-12 7 views
0

10進数の前に3つの数字を、10進数と10進数の後に3つの数字しか受け付けないようにするコードがあります。正規表現のみと小数点問題

動作しないシナリオが1つあります。

例:

私は戻って、12w.123を入力し12.123を入力すると、それはそれは、JavaScriptの分割との関連を知っている「W」を受け入れ、最後の番号3を削除します。

誰でもこの問題を解決する方法は知っていますか?

$('.numeric-decimal-63').on('input', function (event) {    
    var val = $(this).val();   
    var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g); 

    var regex2 = regex1.test(val);  

    if (!regex2){ 

     $(this).val(val.slice(0,-1)); 
    } 

}); 
+0

'$(この).val(val.slice(0、-1));'これは、あなたが途中 – user3080953

+0

を入力しても、最後の文字を削除します@Tretiakはあなたが入力で不要な 'w'を取り除こうとしていますか? – Kayla

+0

はい私はそうです。ユーザーのタイプとして、私は小数点の前後に3桁だけでなく、数値と1桁の数字だけを必要とします – Tretiak

答えて

0
$(this).val(val.slice(0,-1)); 

最後のキーを削除し、それが "1" を削除し "123w1" だろう。あなたは以前の状態に戻したい場合があります。

var state="0"; 
$('.numeric-decimal-63').on('input', function (event) {    
var val = $(this).val();   
var regex1 = new RegExp(/^(\d{1,3}|\d{0,3}\.\d{0,3})$/g); 
if (!regex1.test(val) && val!==""){ 
    $(this).val(state); 
    return; 
} 
state=val; 
}); 
+0

あなたのソリューションはすべてを拭き取り、0に設定します。キャラクターを空白にしたいだけです。 – Tretiak

+0

はすべて公平で、var valの直前にはvar state = "0"が置かれています。私が間違っている? – Tretiak

+0

私はこの時間をもう一度試しました。あなたが言ったように、それは機能します!ありがとうございました。私はそれがどのように設定されるか分からない。 – Tretiak

1

絶対に積極的に決してあからさまブロックユーザー入力を。理由は次のとおりです。

私は入力しています。 、3 Wおっと、指が滑って、問題ない:← Backspaceキー、そこ。さあ、見てみましょう...ハァッ?なぜテキストボックスには12しか表示されませんか?私の3はどこに行きましたか?

代わりに、ユーザーが入力を検証して、それが違反しているかどうかをユーザーに知らせる必要がある場合は、入力が完了した後(つまり、changeイベント)に入力することができます。

HTML5はあなたのためにこれを行います。

<input type="number" min="0" max="999.999" step="0.001" /> 
+0

数字入力はすべてのブラウザで文字を禁止しません。 FFを参照してください。 –

+0

@JenniferMichelle 'number'入力に数値以外の入力があるときにフォームを送信しようとしましたか? –

+0

申し訳ありませんが、私は正規表現の作成方法を理解するために約100のスレッドを読まなければなりませんでした。確かに非常に少数の場合がありますが、検証エラーの束を見るよりもユーザーが簡単な場合があります。 –