最善の方法は、押されたキーではなく、入力の値を確認することです。タブ、矢印、バックスペースなど、文字コードを使用する際に確認が必要な文字があるためです。
そのコードは、ユーザーがキーを押した後の入力値をチェックします。
$('#p_first').keyup(function(){
while(! /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/.test($('#p_first').val())){
$('#p_first').val($('#p_first').val().slice(0, -1));
}
});
while ループは、入力値が有効になるまで最後の文字を削除します。正規表現/^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/
は、整数と浮動小数点数を検証します。「12,12」、「12.1」、「12.」。「12」という数字が重要です。(末尾のドット)も有効です!そうしないと、ユーザーはピリオドを入力できません。
そして、正規表現の送信時([0-9]{1,2})
に、代わりに有効な浮動小数点数をチェックし([0-9]{0,2})
ます。
$('form').submit(function(e){
if(! /^([0-9]+)((\.|,)([0-9]{1,2}))?$/.test($('#p_first').val())){
$('#p_first').addClass('error');
e.preventDefault();
}
});
注意:$('#p_first')
変数に代入する方が良いです。var input = $('#p_first');