9

入力した数値を動的に調整して、千の区切り記号を含めようとしています

これが私のコードです:

function addCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}


<input type="number"  onkeyup="this.value=addCommas(this.value);" />

ただし、4の後に数字を入力すると、フィールドがクリアされます。

私が間違っているアイデアはありますか?jQueryソリューションがある場合、私はすでにそれを自分のサイトで使用しています。

4

5 に答える 5

13

この正規表現を試してください:

function numberWithCommas(x) {
  return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
于 2012-11-29T08:46:48.203 に答える
8

千単位の区切り文字を追加するには、次のように文字列の分割、反転、および置換を行うことができます。

function addThousandsSeparator(input) {
    var output = input
    if (parseFloat(input)) {
        input = new String(input); // so you can perform string operations
        var parts = input.split("."); // remove the decimal part
        parts[0] = parts[0].split("").reverse().join("").replace(/(\d{3})(?!$)/g, "$1,").split("").reverse().join("");
        output = parts.join(".");
    }

    return output;
}

addThousandsSeparator("1234567890"); // returns 1,234,567,890
addThousandsSeparator("12345678.90"); // returns 12,345,678.90
于 2013-08-02T16:37:00.933 に答える
6

試す

<input type="text" onkeyup="this.value=addCommas(this.value);" />

代わりは。関数は数値ではなくテキストを処理しているためです。

于 2012-11-29T08:56:19.873 に答える
2

ディロンが述べたように、それは文字列である必要があります(または、typeof(n)を使用し、そうでない場合は文字列化することができます)

function addCommas(n){
    var s=n.split('.')[1];
    (s) ? s="."+s : s="";
    n=n.split('.')[0]
    while(n.length>3){
        s=","+n.substr(n.length-3,3)+s;
        n=n.substr(0,n.length-3)
    }
    return n+s
}
于 2012-11-29T09:43:20.873 に答える
2

いずれの場合も、フォーマットする前に、次のように、最初に既存のコンマを削除してみてください。jqueryの「ライブ」入力フィールドのコンマを削除する

例:

function addThousandsSeparator(x) {
    //remove commas
    retVal = x ? parseFloat(x.replace(/,/g, '')) : 0;

    //apply formatting
    return retVal.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
于 2015-01-13T15:11:16.120 に答える