web-dev-qa-db-ja.com

Javascript関数では、数字、ドット、カンマを許可する必要があります

数字のドットとコンマを許可する関数を作成する必要があります。だから誰もが次の機能を修正します

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();
  }
}
12
WVW

まず、現在の正規表現ではコンマが許可されていません。これは要件です。

第二に、量指定子を使用していないため、正規表現は単一の文字-[0-9]またはdot。数量詞を使用する必要があります。

第三に、pipeを使用する代わりに、すべての文字を文字クラス内でのみ移動できます。

以下の正規表現を使用してみてください。

/^[0-9.,]+$/

数量詞 +は、パターンの1回以上の出現に一致するために使用されます。
^および$アンカーは、それぞれ文字列の先頭と末尾に一致します。

38
Rohit Jain

JavaScriptは必要ありません:

<input type="text" pattern="[0-9.,]+" title="Please enter a valid decimal number." />

最新のブラウザはこれを完全に処理します。

桁区切り記号と単一の小数点としてコンマを明確に許可したい場合は、これを試してください:

... pattern="\d{1,2}(,\d{3})*(\.\d+)?" ...

ユーザー入力のブロックには固く反対していることに注意してください。必要なものを入力し、無効なものを入力した場合は通知できる必要があります。

7
5
HIRA THAKUR

私の意見では、これが入力のより多くのケースをカバーし、フロートを許可する最適なソリューションです。

     $( ".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)

        });
5
Martin

時々 /^[0-9.,]+$/が機能しない場合

/^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$/
1
Sanjib

_COMMA9.2_の形式に従って数値用に作成した正規表現

  1. _1,350.88_
  2. _120.00_
  3. _1,500,999.24_
  4. _100_
  5. _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+)$

0
gaurav gupta