如何将文本格式化为货币

时间:2012-01-16 04:35:17

标签: javascript jquery jquery-plugins

我有一个插件,可以将数字格式化为货币,方法是插入十进制和&成千上万的分隔符:

1000     -> 1.000
10000,5  -> 10.000,5

我称之为:

$('#input').myPlugin() 

但是我想通过指定用于小数和千位分隔符的字符来调用它:

$('#input').myPlugin({thousand_type: ',' , decimal_type '.'}). 

如何在插件中实现这一目标?


这是插件:

(function( $ ){

  $.fn.myPlugin = function() {
    $('input').keypress(function(event){
        if ((event.which  < 48 || event.which  > 57) && event.which  != 8 && event.which  != 44)
        event.preventDefault();
    });
    $('input').keyup(function(event) {
        event.preventDefault();  

        val = $(this).val();

        if(val != ''){
            thousand_type = '.';        
            if(thousand_type == '.'){
                decimal_type = ',';
            }else{
                decimal_type = '.';
            }

            //remove thousand mark
            if(thousand_type == '.'){
                val = String(val).replace(/\./g, "");
            }else{
                val = String(val).replace(/\,/g, "");
            }

            //get position of decimal mark
            pos_decimal = String(val).indexOf(decimal_type);

            //device the number to thousand and decimal
            if(pos_decimal > -1){
                sub_decimal = String(val).substring(pos_decimal, String(val).length);
                sub_thousand = String(val).substring(0, pos_decimal);
            }else{
                sub_decimal = '';
                sub_thousand = val;
            }
            //1.111.111,33
            //remove decimal mark
            if(decimal_type == '.'){
                removed_mark_val = String(val).replace(/\./g, "");
            }else{
                removed_mark_val = String(val).replace(/\,/g, "");
            }

            //check is Numeric
            result = IsNumeric(removed_mark_val);

            if(result == true){
                if(thousand_type == '.'){
                    sub_thousand = String(sub_thousand).split("").reverse().join("")
                      .replace(/(.{3}\B)/g, "$1" + thousand_type)
                      .split("").reverse().join("");
                }else{              
                    sub_thousand = String(sub_thousand).split("").reverse().join("")
                      .replace(/(.{3}\B)/g, "$1" + thousand_type)
                      .split("").reverse().join("");
                }
                val = sub_thousand + sub_decimal;
                //1111111,33
                $(this).attr('value',val);  
            }else{

            }
        }
    });
    function IsNumeric(input){
        var RE = /^-{0,1}\d*\.{0,1}\d+$/;
        return (RE.test(input));
    }
  };
})( jQuery );

2 个答案:

答案 0 :(得分:1)

这是我写的一个插件(缩小了319个字节):

(function($)
{
    $.fn.myPlugin = function(options)
    {
        options = $.extend({
            thousands: ',',
            decimal: '.'
        }, options);

        return this.keyup(function()
        {
            $(this).val(function(el, val)
            {
                val = val.replace(/[^\d.,]/g, '').split(options.decimal);
                val[0] = val[0].replace(options.decimal === '.' ? /,/g : /\./g, '');
                val[0] = val[0].replace(/(\d)(?=(\d{3})+$)/g, "$1" + options.thousands);
                return val.join(options.decimal);
            });
        });
    };

})(jQuery);

像这样使用:

$('input').myPlugin({
    thousands: '.',
    decimal: ','
});

在此处查看:[{3}}


注意:这仍然需要一些工作,因为箭头键非常混乱。我在我的项目中使用它,插件绑定到blur事件。但是因为你似乎想要它keyup,所以需要做一些工作来使用箭头键。

答案 1 :(得分:0)

如果要将参数传递给jQuery插件,只需接受插件函数的参数即可。

$.fn.myPlugin = function(opts) {

    ...

    if (opts.thousands_type == ',') {

    ...

See here了解更多信息。