数字のドットとコンマを許可する関数を作成する必要があります。だから誰もが次の機能を修正します
function on(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
まず、現在の正規表現ではコンマが許可されていません。これは要件です。
第二に、量指定子を使用していないため、正規表現は単一の文字-[0-9]
またはdot
。数量詞を使用する必要があります。
第三に、pipe
を使用する代わりに、すべての文字を文字クラス内でのみ移動できます。
以下の正規表現を使用してみてください。
/^[0-9.,]+$/
数量詞 +
は、パターンの1回以上の出現に一致するために使用されます。^
および$
アンカーは、それぞれ文字列の先頭と末尾に一致します。
JavaScriptは必要ありません:
<input type="text" pattern="[0-9.,]+" title="Please enter a valid decimal number." />
最新のブラウザはこれを完全に処理します。
桁区切り記号と単一の小数点としてコンマを明確に許可したい場合は、これを試してください:
... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ...
ユーザー入力のブロックには固く反対していることに注意してください。必要なものを入力し、無効なものを入力した場合は通知できる必要があります。
私の意見では、これが入力のより多くのケースをカバーし、フロートを許可する最適なソリューションです。
$( ".numerical" ).on('input', function() {
var value=$(this).val().replace(/[^0-9.,]*/g, '');
value=value.replace(/\.{2,}/g, '.');
value=value.replace(/\.,/g, ',');
value=value.replace(/\,\./g, ',');
value=value.replace(/\,{2,}/g, ',');
value=value.replace(/\.[0-9]+\./g, '.');
$(this).val(value)
});
時々 /^[0-9.,]+$/
が機能しない場合
/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/
_COMMA9.2
_の形式に従って数値用に作成した正規表現
例
1,350.88
_120.00
_1,500,999.24
_100
_10000000
_正規表現
^(\d+|\d{1,3},\d{3}|\d{1,3},\d{3},\d{3}|\d{1,3}(,\d{3})*|\d{1,3}(,\d{3})*\.\d+)$