如何使用 jquery 正确格式化货币?

我不需要一个掩码,但我需要的东西,将格式化货币(在所有浏览器) ,不允许任何字母或特殊字符的类型。谢谢你的帮助

例如:

有效期: 五十元
1000.53美元

无效: $w45.00
$34.3 r6

270763 次浏览

作为为什么 jQuery FormatCurrency 插件是一个好答案的推论,我想反驳你的评论:

1.Code.google.com/p/jquery-formatcurrency -不能过滤掉所有的字母。您可以键入一个字母,它不会删除它。

是的,format Currency ()本身不过滤字母:

// only formats currency
$(selector).formatCurrency();

但是包含在 format Currency 插件中的 toNumber ()可以。

因此,你想做:

// removes invalid characters, then formats currency
$(selector).toNumber().formatCurrency();

另一个选项(如果您使用 ASP.Net 剃须刀视图)是,在您的视图中,您可以这样做

<div>@String.Format("{0:C}", Model.total)</div>

这将正确地格式化它

如果在 jQuery 中也可以使用正则表达式

$(".totalSum").text('$' + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString());

扩展 Melu 的回答,你可以这样做,以功能化的代码和处理负数。

输出样本:
$5.23
5.23美元

function formatCurrency(total) {
var neg = false;
if(total < 0) {
neg = true;
total = Math.abs(total);
}
return (neg ? "-$" : '$') + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString();
}

使用 输入掩码3. x。 点击这里查看演示

包括文件:

<script src="/assets/jquery.inputmask.js" type="text/javascript"></script>
<script src="/assets/jquery.inputmask.extensions.js" type="text/javascript"></script>
<script src="/assets/jquery.inputmask.numeric.extensions.js" type="text/javascript"></script>

代码是

$(selector).inputmask('decimal',
{ 'alias': 'numeric',
'groupSeparator': '.',
'autoGroup': true,
'digits': 2,
'radixPoint': ",",
'digitsOptional': false,
'allowMinus': false,
'prefix': '$ ',
'placeholder': '0'
}
);

亮点:

  • 很好用
  • 面具里的任何可选部件
  • 定义隐藏复杂性的别名的可能性
  • 日期/日期时间掩码
  • 数字面具
  • 很多复试
  • 非贪婪的面具
  • 许多特性可以通过选项来启用/禁用/配置
  • 支持只读/禁用/dir = “ rtl”属性
  • 支持 data-input 掩码属性
  • 多面罩支持多面罩支持
  • 正则表达式掩码支持
  • 动态掩模支持动态掩模支持
  • 预处理掩码支持
  • 没有输入元素的值格式化/验证

使用 jQuery (没有插件)尝试 regexp currency:

$(document).ready(function(){
$('#test').click(function() {
TESTCURRENCY = $('#value').val().toString().match(/(?=[\s\d])(?:\s\.|\d+(?:[.]\d+)*)/gmi);
if (TESTCURRENCY.length <= 1) {
$('#valueshow').val(
parseFloat(TESTCURRENCY.toString().match(/^\d+(?:\.\d{0,2})?/))
);
} else {
$('#valueshow').val('Invalid a value!');
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" value="12345.67890" id="value">
<input type="button" id="test" value="CLICK">
<input type="text" value="" id="valueshow">

编辑: 将新值检查为有效/无效

我过去常常使用 jquery 格式的货币插件,但是最近它有很多 bug。我只需要美元/CAD 格式化,所以我写了自己的自动格式化。

$(".currencyMask").change(function () {
if (!$.isNumeric($(this).val()))
$(this).val('0').trigger('change');


$(this).val(parseFloat($(this).val(), 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString());
});

简单地设置任何输入的类应该被格式化为货币 <input type="text" class="currencyMask" />,它将在任何浏览器中完美地格式化它。

JavaScript 已经有了。

var cur = function (amt) {
return Intl.NumberFormat('en-US', { style: "currency", currency: "USD" }).format(amt);
};