添加逗号时如何更新此 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 插件/正则表达式以忽略小数?的主要内容,如果未能解决你的问题,请参考以下文章