81

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

例子:

有效:$50.00
$1,000.53

无效:$w45.00
$34.3r6

4

7 回答 7

104

另一种选择(如果您使用的是 ASP.Net 剃须刀视图)是,在您的视图中,您可以执行

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

这将正确格式化它。注意(item.total 是双/十进制)

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

$(".totalSum").text('$' + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,").toString());
于 2013-06-06T13:55:50.530 回答
50

JQUERY FORMATCURRENCY 插件
http://code.google.com/p/jquery-formatcurrency/

于 2011-02-18T17:07:39.677 回答
39

扩展 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();
}
于 2014-05-19T22:02:52.600 回答
22

作为 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();
于 2012-03-12T19:41:40.980 回答
16

使用jquery.inputmask 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" 属性
  • 支持数据输入掩码属性
  • 多面罩支持
  • 正则表达式掩码支持
  • 动态掩码支持
  • 预处理掩码支持
  • 没有输入元素的值格式化/验证
于 2014-07-18T05:34:48.820 回答
10

以前用jquery格式的货币插件,最近一直很bug。我只需要格式化美元/加元,所以我编写了自己的自动格式化。

$(".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" />格式,它就会在任何浏览器中完美地格式化它。

于 2016-06-01T21:20:11.223 回答
4

使用 jQuery (无插件)尝试正则表达式货币:

$(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">

编辑:新检查值是否有效/无效

于 2015-12-28T18:30:41.770 回答