正则表达式替换成千上万的逗号

时间:2017-12-07 02:06:44

标签: javascript regex

我有一个Javascript函数,我正在使用它来遍历页面上的一堆输入并将它们转换为数千个兼容的逗号系统。简而言之,无论用户输入什么内容,他们都会得到一个友好的数千个分开的数字。

Input: 5000
Return: 5,000

以下是该功能如何分解

function add_commas()
{
    $('.field-group .field input[type=text]').each(function()
    {
        // format number
        $(this).val(function(index, value) {
            return value
            .replace(/\D/g, "")
            .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
            ;
        });
    });
}

除了一件事,一切都正常。这是传入数据的另一个例子以及返回的内容:

Input: 9.5
Return: 95

注意整数。

我想知道是否有一种方法可以忽略或忽略小数,如果它没有一个,但保留它并尊重它,如果有一个。这是我希望的输入/输出:

Input: 5000
Return: 5,000

Input: 9.5
Return: 9.5

Input: 1000.50
Return: 1,000.50

希望这很清楚,但如果您需要有关手头问题的更多信息,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:2)

更改第一个替换,因为它正在删除字符串中的点

.replace(/[^0-9\.]/g, "")

答案 1 :(得分:2)

实际上正则表达式不适合这个问题,因为不是每个文化都使用逗号作为千兆分隔符和基数分隔符的句点。您应该使用toLocaleString。在节点中,例如:

> (52342.214).toLocaleString()
'52,342.214'
> (52342.214).toLocaleString('de-DE')
'52.342,214'
> (52342.214).toLocaleString('ar-EG')
'٥٢٬٣٤٢٫٢١٤'
> (5234289877.21).toLocaleString('en-US')
'5,234,289,877.21'

通过这种方式,您不必编写自己的容易出错的代码,并且可以针对不同的文化进行本地化。这项工作已经为你完成了!

您也可以免费获得问题的零部分!注意:

> (38209).toLocaleString()
'38,209'
> (38209.0000).toLocaleString()
'38,209'

再次,一切都是免费的!