zoukankan      html  css  js  c++  java
  • jquery formatCurrency货币格式化处理

    jquery formatCurrency是一个对货币格式进行格式化输入控制、显示的一个jquery插件,可以对文本框输入进行货币合法性验证,并且支持对文本输入字符串进行格式化显示。(国内的会计记账法是保留两位小数,整数位每3个千位使用,号隔开)

    1.引入jquery和插件(jquery省略)

    <script src="jquery.formatCurrency-1.4.0.js" type="text/javascript" ></script>

     

    2.使用插件API方法

    // 如将页面所有表格的金额单元格格式化显示
    $('.label').formatCurrency();
    
    // 
    $('.ageInput').toNumber();

     

    如图

     

    插件详细代码

    复制代码
    //  This file is part of the jQuery formatCurrency Plugin.
    //
    //    The jQuery formatCurrency Plugin is free software: you can redistribute it
    //    and/or modify it under the terms of the GNU General Public License as published 
    //    by the Free Software Foundation, either version 3 of the License, or
    //    (at your option) any later version.
    
    //    The jQuery formatCurrency Plugin is distributed in the hope that it will
    //    be useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
    //    of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    //    GNU General Public License for more details.
    //
    //    You should have received a copy of the GNU General Public License along with 
    //    the jQuery formatCurrency Plugin.  If not, see <http://www.gnu.org/licenses/>.
    //    wiki http://code.google.com/p/jquery-formatcurrency/wiki/Usage
    
    (function($) {
    
        $.formatCurrency = {};
    
        $.formatCurrency.regions = [];
    
        // default Region is en
        $.formatCurrency.regions[''] = {
            symbol: '',
            positiveFormat: '%s%n',
            negativeFormat: '(%s%n)',
            decimalSymbol: '.',
            digitGroupSymbol: ',',
            groupDigits: true
        };
    
        $.fn.formatCurrency = function(destination, settings) {
    
            if (arguments.length == 1 && typeof destination !== "string") {
                settings = destination;
                destination = false;
            }
    
            // initialize defaults
            var defaults = {
                name: "formatCurrency",
                colorize: false,
                region: '',
                global: true,
                roundToDecimalPlace: 2, // roundToDecimalPlace: -1; for no rounding; 0 to round to the dollar; 1 for one digit cents; 2 for two digit cents; 3 for three digit cents; ...
                eventOnDecimalsEntered: false
            };
            // initialize default region
            defaults = $.extend(defaults, $.formatCurrency.regions['']);
            // override defaults with settings passed in
            settings = $.extend(defaults, settings);
    
            // check for region setting
            if (settings.region.length > 0) {
                settings = $.extend(settings, getRegionOrCulture(settings.region));
            }
            settings.regex = generateRegex(settings);
    
            return this.each(function() {
                $this = $(this);
    
                // get number
                var num = '0';
                num = $this[$this.is('input, select, textarea') ? 'val' : 'html']();
    
                //identify '(123)' as a negative number
                if (num.search('\(') >= 0) {
                    num = '-' + num;
                }
    
                if (num === '' || (num === '-' && settings.roundToDecimalPlace === -1)) {
                    return;
                }
    
                // if the number is valid use it, otherwise clean it
                if (isNaN(num)) {
                    // clean number
                    num = num.replace(settings.regex, '');
                    
                    if (num === '' || (num === '-' && settings.roundToDecimalPlace === -1)) {
                        return;
                    }
                    
                    if (settings.decimalSymbol != '.') {
                        num = num.replace(settings.decimalSymbol, '.');  // reset to US decimal for arithmetic
                    }
                    if (isNaN(num)) {
                        num = '0';
                    }
                }
                
                // evalutate number input
                var numParts = String(num).split('.');
                var isPositive = (num == Math.abs(num));
                var hasDecimals = (numParts.length > 1);
                var decimals = (hasDecimals ? numParts[1].toString() : '0');
                var originalDecimals = decimals;
                
                // format number
                num = Math.abs(numParts[0]);
                num = isNaN(num) ? 0 : num;
                if (settings.roundToDecimalPlace >= 0) {
                    decimals = parseFloat('1.' + decimals); // prepend "0."; (IE does NOT round 0.50.toFixed(0) up, but (1+0.50).toFixed(0)-1
                    decimals = decimals.toFixed(settings.roundToDecimalPlace); // round
                    if (decimals.substring(0, 1) == '2') {
                        num = Number(num) + 1;
                    }
                    decimals = decimals.substring(2); // remove "0."
                }
                num = String(num);
    
                if (settings.groupDigits) {
                    for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
                        num = num.substring(0, num.length - (4 * i + 3)) + settings.digitGroupSymbol + num.substring(num.length - (4 * i + 3));
                    }
                }
    
                if ((hasDecimals && settings.roundToDecimalPlace == -1) || settings.roundToDecimalPlace > 0) {
                    num += settings.decimalSymbol + decimals;
                }
    
                // format symbol/negative
                var format = isPositive ? settings.positiveFormat : settings.negativeFormat;
                var money = format.replace(/%s/g, settings.symbol);
                money = money.replace(/%n/g, num);
    
                // setup destination
                var $destination = $([]);
                if (!destination) {
                    $destination = $this;
                } else {
                    $destination = $(destination);
                }
                // set destination
                $destination[$destination.is('input, select, textarea') ? 'val' : 'html'](money);
    
                if (
                    hasDecimals && 
                    settings.eventOnDecimalsEntered && 
                    originalDecimals.length > settings.roundToDecimalPlace
                ) {
                    $destination.trigger('decimalsEntered', originalDecimals);
                }
    
                // colorize
                if (settings.colorize) {
                    $destination.css('color', isPositive ? 'black' : 'red');
                }
            });
        };
    
        // Remove all non numbers from text
        $.fn.toNumber = function(settings) {
            var defaults = $.extend({
                name: "toNumber",
                region: '',
                global: true
            }, $.formatCurrency.regions['']);
    
            settings = jQuery.extend(defaults, settings);
            if (settings.region.length > 0) {
                settings = $.extend(settings, getRegionOrCulture(settings.region));
            }
            settings.regex = generateRegex(settings);
    
            return this.each(function() {
                var method = $(this).is('input, select, textarea') ? 'val' : 'html';
                $(this)[method]($(this)[method]().replace('(', '(-').replace(settings.regex, ''));
            });
        };
    
        // returns the value from the first element as a number
        $.fn.asNumber = function(settings) {
            var defaults = $.extend({
                name: "asNumber",
                region: '',
                parse: true,
                parseType: 'Float',
                global: true
            }, $.formatCurrency.regions['']);
            settings = jQuery.extend(defaults, settings);
            if (settings.region.length > 0) {
                settings = $.extend(settings, getRegionOrCulture(settings.region));
            }
            settings.regex = generateRegex(settings);
            settings.parseType = validateParseType(settings.parseType);
    
            var method = $(this).is('input, select, textarea') ? 'val' : 'html';
            var num = $(this)[method]();
            num = num ? num : "";
            num = num.replace('(', '(-');
            num = num.replace(settings.regex, '');
            if (!settings.parse) {
                return num;
            }
    
            if (num.length == 0) {
                num = '0';
            }
    
            if (settings.decimalSymbol != '.') {
                num = num.replace(settings.decimalSymbol, '.');  // reset to US decimal for arthmetic
            }
    
            return window['parse' + settings.parseType](num);
        };
    
        function getRegionOrCulture(region) {
            var regionInfo = $.formatCurrency.regions[region];
            if (regionInfo) {
                return regionInfo;
            }
            else {
                if (/(w+)-(w+)/g.test(region)) {
                    var culture = region.replace(/(w+)-(w+)/g, "$1");
                    return $.formatCurrency.regions[culture];
                }
            }
            // fallback to extend(null) (i.e. nothing)
            return null;
        }
    
        function validateParseType(parseType) {
            switch (parseType.toLowerCase()) {
                case 'int':
                    return 'Int';
                case 'float':
                    return 'Float';
                default:
                    throw 'invalid parseType';
            }
        }
        
        function generateRegex(settings) {
            if (settings.symbol === '') {
                return new RegExp("[^\d" + settings.decimalSymbol + "-]", "g");
            }
            else {
                var symbol = settings.symbol.replace('$', '\$').replace('.', '\.');        
                return new RegExp(symbol + "|[^\d" + settings.decimalSymbol + "-]", "g");
            }    
        }
    
    })(jQuery);
    复制代码

     

     

  • 相关阅读:
    RMAN 增量备份 的 对象测试
    小论工具类App的盈利之道
    linux下二进制文件比较程序
    [置顶] 对iOS开发有用的一些自动化处理脚本
    [Win8]Windows8开发笔记(八):数据绑定的基础
    NetBeans 时事通讯(刊号 # 116 Sep 11, 2010)
    域名信息证实 JavaEye 已被 CSDN 收购
    插件架构简介
    GAE for Java exception: no matching index found.
    Java 7 最快要到 2012 年中发布
  • 原文地址:https://www.cnblogs.com/y0umer/p/3838962.html
Copyright © 2011-2022 走看看