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

时间:2011-02-18 16:10:11

标签: jquery currency formatter

我不需要面具,但我需要一些可以格式化货币的东西(在所有浏览器中)并且不允许输入任何字母或特殊字符。谢谢你的帮助

示例:

有效期:$ 50.00
       $ 1,000.53

无效:$ w45.00
           $ 34.3r6

9 个答案:

答案 0 :(得分:91)

另一个选项(如果你使用的是ASP.Net razor视图)是,在你的视图中你可以做到

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

这会正确格式化。 note(item.total是double / decimal)

如果在jQuery中你也可以使用Regex

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

答案 1 :(得分:47)

答案 2 :(得分:34)

扩展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 :(得分:19)

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

1。 code.google.com/p/jquery-formatcurrency - 不会过滤掉所有字母。您可以键入单个字母,但不会将其删除。

是的,formatCurrency()本身不会过滤掉字母:

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

但是,包含在formatCurrency插件中的toNumber()可以。

你想这样做:

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

答案 4 :(得分:15)

使用jquery.inputmask 3.x。 请参阅演示here

包含文件:

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

亮点:

  • 易于使用
  • 可选部件任何部件都在面具
  • 定义隐藏复杂性的别名的可能性
  • 日期/日期时间面​​具
  • 数字掩码
  • 许多回调
  • 非贪婪的面具
  • 可以通过选项启用/禁用/配置许多功能
  • 支持readonly / disabled / dir =“rtl”属性
  • 支持data-inputmask属性
  • 多面具支持
  • regex-mask support
  • 动态掩码支持
  • 预处理 - 掩码支持
  • 没有输入元素的值格式化/验证

答案 5 :(得分:7)

我曾经使用过jquery格式的货币插件,但最近它已经非常错误了。我只需要格式化USD / 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" />的类,它就会在任何浏览器中完美地格式化。

答案 6 :(得分:3)

使用jQuery (无插件)

尝试使用regexp货币

&#13;
&#13;
$(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!');
    }
  });
});
&#13;
<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">
&#13;
&#13;
&#13;

编辑:新建检查有效/无效的值

答案 7 :(得分:-2)

用于货币格式的jQuery插件请点击此处 Auto Numeric – Currency formatting made easy

答案 8 :(得分:-2)

当我遇到同样的问题时,Jus遇到了这个问题。非常简单快速地实施:

http://plentz.github.io/jquery-maskmoney/