添加逗号时如何更新此 jQuery 插件/正则表达式以忽略小数?

Posted

技术标签:

【中文标题】添加逗号时如何更新此 jQuery 插件/正则表达式以忽略小数?【英文标题】:How to update this jQuery plug-in/regex to ignore decimals when adding commas? 【发布时间】:2011-12-28 20:36:01 【问题描述】:

我正在使用以下 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());
    );
;

【问题讨论】:

How can I format numbers as money in javascript? 的可能重复项 【参考方案1】:

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

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

编辑:

或者更好:

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

【讨论】:

感谢您的回复。不幸的是,在我进行更改后,添加一个带小数点和两个零的数字时,逗号不会出现。有什么想法吗?【参考方案2】:

*** 上已有一个很好的答案:How can I format numbers as money in 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(/(\d3)(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
 ;

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

【讨论】:

【参考方案3】:

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

replace(/(\d)(?=(?:\d3)+(?:$|\.))/g, "$1,");

【讨论】:

以上是关于添加逗号时如何更新此 jQuery 插件/正则表达式以忽略小数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 验证插件,如何在文本框上添加正则表达式验证?

必要时使用正则表达式向 csv 文件添加逗号

jquery.validation自定义正则表达式验证

使用正则表达式拆分字符串时跳过逗号分隔字符串中的空格

逗号分隔的列表正则表达式 [重复]

jQuery validate:如何为正则表达式验证添加规则?