【问题标题】:Only add thousand separator before decimal comma只在小数点前添加千位分隔符
【发布时间】:2013-09-02 00:55:50
【问题描述】:

我在 * 上找到了一个正则表达式来添加“,”或“。”在每三个数字之后,具体取决于您的语言。

(\d)(?=(\d\d\d)+(?!\d))

问题是当我们到达小数点时也会发生这种情况,例如:

5487445.46878

使用以下代码(和正则表达式)的结果是:

return number.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");

结果:

5,487,445.46,878

根据您的语言转换数字时,我正在使用此正则表达式。例如,在荷兰语中,逗号用作分隔符,因此我执行以下操作:

return number.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1.")

这会导致

5.487.445,46.878

这些当然需要变成:

5,487,445.46878

5.487.445,4687

有人知道我需要在哪里更新正则表达式以忽略小数点吗?

【问题讨论】:

  • 既然你用 jQuery 标记了这个,我建议使用plugins.jquery.com/df-number-format
  • 1-up 对于我还没有找到的有趣建议。我想我可以使用它并将其与我所拥有的合并,因为您的建议不支持不同的语言。

标签: jquery regex currency


【解决方案1】:

您可以使用您的RegEx,但如果其中有逗号或点,请先拆分您的号码。

jsFiddle demo

 var input = '5487445.46878';
 var parts = input.split('.');
 var part1 = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
 var part2 = parts[1];

 alert(part1 + '.' + part2);

【讨论】:

  • 该死的,没想到。会尽快尝试。
  • 我想我会这样做。没必要太复杂:)
  • 我已经在我的 jquery enxtion 方法中实现了这一点,并且效果很好。感谢您提供简单易行的解决方案。然而,我确实把它缩小了一点。 jsfiddle.net/4kb9R/71
  • np。为了更好地理解,我没有缩小它;)
【解决方案2】:

你可以试试这个:-

    function thousandsSeparator(input) {
    var output = input
    if (parseFloat(input)) {
        input = new String(input);
        var parts = input.split("."); 
        parts[0] = parts[0].split("").reverse().join("").replace(/(\d{3})(?!$)/g, "$1,").split("").reverse().join("");
        output = parts.join(".");
    }

    return output;
}

【讨论】:

  • 不,不起作用。当你添加更大的数字时也会做奇怪的事情。
  • @reaper_unique:- 更新了我的答案。请检查。它一定会起作用的! :)
  • 谢谢,会尽快检查。但是,嗯,你不是用马丁的答案更新了吗?
  • @reaper_unique:- 请让我知道这是否适合您! ;)
  • 我会支持你的。