如何使用JQuery格式化货币

我正在尝试使用以下代码格式化货币:

$('#currency').keyup(function(e){ var val = $(this).val(); val = val.replace(/[^0-9]/g,''); if(val.length >= 2) val = '$' + val.substring(0,2) + ',' + val.substring(2); if(val.length >= 6) val = val.substring(0,7) + val.substring(7); if(val.length > 7) val = val.substring(0,7); $(this).val(val); }); 

但这只适用于“10,000美元”或类似的数量,如何在一个代码中包含数千,数百和数百万?

这是一个很好的函数在vanilla JS中处理事物:

 var format = function(num){ var str = num.toString().replace("$", ""), parts = false, output = [], i = 1, formatted = null; if(str.indexOf(".") > 0) { parts = str.split("."); str = parts[0]; } str = str.split("").reverse(); for(var j = 0, len = str.length; j < len; j++) { if(str[j] != ",") { output.push(str[j]); if(i%3 == 0 && j < (len - 1)) { output.push(","); } i++; } } formatted = output.reverse().join(""); return("$" + formatted + ((parts) ? "." + parts[1].substr(0, 2) : "")); }; 

但是,对于jQuery,您可以随时将其转换为插件,或者只使用它:

 $(function(){ $("#currency").keyup(function(e){ $(this).val(format($(this).val())); }); }); 

编辑我更新了小提琴JSFiddle

您可以使用regex来解决此问题,请注意您的输入字段应该阻止用户键入字母/非数字字符,而不是用空字符串替换所有键入的非数字字符,这样做不合适:

 $('input').on('input', function(e){ $(this).val(formatCurrency(this.value.replace(/[,$]/g,''))); }).on('keypress',function(e){ if(!$.isNumeric(String.fromCharCode(e.which))) e.preventDefault(); }).on('paste', function(e){ var cb = e.originalEvent.clipboardData || window.clipboardData; if(!$.isNumeric(cb.getData('text'))) e.preventDefault(); }); function formatCurrency(number){ var n = number.split('').reverse().join(""); var n2 = n.replace(/\d\d\d(?!$)/g, "$&,"); return "$" + n2.split('').reverse().join(''); } 

演示。

以下是使用jquery插件的示例:

    JQuery FormatCurrency Sample       

Format Currency Sample

Formatting Using Button Click

Formatting Currency to an Html Span tag. $1,220.00

Formatting Using Blur (Lost Focus)

请参考:

https://code.google.com/p/jquery-formatcurrency/

演示小提琴:jsfiddle.net/2wEe6/72