web-dev-qa-db-ja.com

通貨の検証

通貨/通貨フィールドのJavaScript検証の記述を手伝ってください。

したがって、正規表現を指定してください(:)がある場合

また、私の地域では、フィールドの「$」のように通貨記号は必要ありませんです。

検証のために小数のみを特殊文字として含める。、および数値。

28
dev646

あなたは正規表現を使うことができます:

_var regex  = /^\d+(?:\.\d{0,2})$/;
var numStr = "123.20";
if (regex.test(numStr))
    alert("Number is valid");
_

小数点以下の厳密さが求められない場合は、単項(_+_)演算子を使用して数値にキャストし、その妥当性を確認する方が簡単な場合があります。

_var numStr = "123.20";
var numNum = +numStr; // gives 123.20
_

数値文字列が無効な場合、NaN(数値ではない)を返します。これは簡単にテストできます。

_var numStr = "ab123c";
var numNum = +numStr;
if (isNaN(numNum))
    alert("numNum is not a number");
_

もちろん、ユーザーは小数点以下の桁数を追加できますが、number.toFixed(2)を使用して余分な桁を切り捨てて小数点以下2桁に丸めることができます。 parseFloatは入力に対する厳密性がはるかに低く、文字列が数字で始まる限り、文字列から見つけることができる最初の数字を取得します。 parseFloat("123abc")は_123_を生成します。

40
Andy E

私は受け入れられた答えから私の答えを構築しました。

var regex = /^[1-9]\d*(((,\d{3}){1})?(\.\d{0,2})?)$/;

^[1-9]番号は1〜9で始まる必要があります
\d*番号は、任意の桁数にできます
(...)$最後から次のグループを見てください(...)$
(...)?(...)?オプションで2つのグループを探します。最初はカンマ用、2番目は小数用です。
(,\d{3}){1}カンマが1つ出現し、その後にちょうど3桁が続くのを探します
\.\d{0,2} 0、1、または2桁が後に続く小数を探します。

この正規表現は、次のルールに基づいて機能します。

  • 有効な値は、0から9の数字、コンマ、および小数点です。
  • 顧客が複数の小数点または複数のカンマを入力した場合、値は無効であり、受け入れられません。

  • 無効な入力値の例

    • 1.2.3
    • 1、2、4
  • 有効な入力値の例
    • 1.23
    • 1,000
    • 3967。
    • 23
    • 1.2
    • 999,999.99

例はこちらにあります: http://jsfiddle.net/rat141312/Jpxu6/1/

[〜#〜]更新[〜#〜]

正規表現の[1-9][0-9]に変更することにより、1未満の数値も検証できます。例:0.42、007

27
Sababado
/[1-9]\d*(?:\.\d{0,2})?/

[1-9] - must start with 1 to 9
\d* - any number of other digits
(?: )? - non capturing optional group
\. - a decimal point
\d{0,2} - 0 to 2 digits

それはあなたのために働きますか?または多分 parseFloat

var float = parseFloat( input );
1
meouw

私にとって、INRでのインド通貨の問題はありません

var regex = /^[1-9]{0,2}(,{0,1})(\d{2},)*(\d{3})*(?:\.\d{0,2})$/;
var a = '1,111.11';
regex.test(a); 
0
Jasbeer Rawal
 let amount = document.querySelector('#amount'), preAmount = amount.value;
        amount.addEventListener('input', function(){
            if(isNaN(Number(amount.value))){
                amount.value = preAmount;
                return;
            }

            let numberAfterDecimal = amount.value.split(".")[1];
            if(numberAfterDecimal && numberAfterDecimal.length > 3){
                amount.value = Number(amount.value).toFixed(3);;
            }
            preAmount = amount.value;
        })
<input type="text" id="amount">
0
user8640104