Как обновить этот плагин / регулярное выражение jQuery, чтобы игнорировать десятичные дроби при добавлении запятых? - PullRequest
0 голосов
/ 29 декабря 2011

Я использую следующий плагин jQuery для автоматического добавления запятых к числу.Проблема заключается в том, что при вводе десятичной суммы (например, 1000,00 долларов США) она изменяется на 1000 долларов США.

Как можно обновить регулярное выражение, чтобы игнорировать десятичную точку и любые символы после нее?

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());
    });
};

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Вот отличный ответ уже на 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/

1 голос
/ 29 декабря 2011

Это должно работать, если после .:

replace(/(\d)(?=(?:\d{3})+(?:$|\.))/g, "$1,");
не более 3 цифр
1 голос
/ 29 декабря 2011

кажется простым исправлением. Просто измените .{3} (любые три символа) на [^.]{3} (любые три символа без точки)

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

EDIT:

или еще лучше:

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