0

我正在使用以下 jQuery 插件自动将逗号添加到数字中。问题是,当输入十进制金额(如 $1,000.00)时,它会将其更改为 $1,000,.00。

如何更新正则表达式以忽略小数点及其后的任何字符?

String.prototype.commas = function() {
    return this.replace(/(.)(?=(.{3})+$)/g,"$1,");
};

$.fn.insertCommas = function () {
    return this.each(function () {
        var $this = $(this);

        $this.val($this.val().replace(/(,| )/g,'').commas());
    });
};
4

3 回答 3

1

StackOverflow 上已经有一个很好的答案:如何在 JavaScript 中将数字格式化为货币?

Number.prototype.formatMoney = function(c, d, t){
var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
   return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
 };

这是一个演示:http: //jsfiddle.net/H4KLD/

于 2011-12-28T20:45:52.737 回答
1

似乎是一个简单的修复。只需将.{3}(任何三个字符)更改为[^.]{3}(任何非句点三个字符)

String.prototype.commas = function() {
    return this.replace(/(.)(?=([^.]{3})+$)/g,"$1,");
};

编辑:

或者更好:

String.prototype.commas = function() {
    return this.replace(/(\d)(?=([^.]{3})+($|[.]))/g,"$1,");
};
于 2011-12-28T20:39:38.840 回答
1

只要后面的数字不超过 3 位,这应该可以工作.

replace(/(\d)(?=(?:\d{3})+(?:$|\.))/g, "$1,");
于 2011-12-28T20:48:36.903 回答