【问题标题】:Adding comma as thousands separator (javascript) - output being deleted instead添加逗号作为千位分隔符(javascript) - 输出被删除
【发布时间】:2012-11-17 06:57:10
【问题描述】:

我正在尝试动态调整输入的数值以包含千位分隔符

这是我的代码:

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 解决方案,我已经在我的网站上使用它。

【问题讨论】:

  • 使用基本的for 循环应该更简单
  • 使用JSFiddle 无法按预期工作,但该字段未清除。

标签: javascript jquery


【解决方案1】:

试试这个正则表达式:

function numberWithCommas(x) {
  return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

【讨论】:

  • 完全一样的结果,只是在第4个之后删除它
【解决方案2】:

要添加千位分隔符,您可以像这样对调用进行字符串拆分、反转和替换:

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

【讨论】:

    【解决方案3】:

    试试

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

    相反。由于该函数使用的是文本而不是数字。

    【讨论】:

    • 你真是个该死的天才先生。它工作正常,逗号在除最后三个之外的每个数字后添加,但我认为可以解决这个问题
    • 请问您是如何解决每个数字后添加逗号的问题
    • 你修复了多余的逗号吗?
    【解决方案4】:

    正如 Dillon 提到的,它必须是一个字符串(或者你可以使用 typeof(n) 和 stringify 如果不是)

    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
    }
    

    【讨论】:

      【解决方案5】:

      在格式化之前,请先尝试删除现有的逗号,例如:Removing commas in 'live' input fields in jquery

      例子:

      function addThousandsSeparator(x) {
          //remove commas
          retVal = x ? parseFloat(x.replace(/,/g, '')) : 0;
      
          //apply formatting
          return retVal.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
      }
      

      【讨论】:

      • 这似乎是最好的答案,唯一的问题是当字段为空时返回“0”,我无法确定原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      相关资源
      最近更新 更多