输入框内格式化金额、银行卡号

摘要:
我们经常遇到需要在项目中格式化的金额和银行卡号。通常,我们有两种常见的格式:输入框内的格式和输入框外的格式。金额的格式与银行卡号的格式相似,但有些不同,因为金额每三位数用逗号分隔。通常,结尾有一个小数点,保留两个有效数字。输入框外部格式化卡号的原理非常简单。它用于隐藏显示格式模块。当输入框获得焦点时,将显示它,当焦点丢失时,将隐藏它。

我们在项目中经常遇到需要格式化的金额数和银行卡号,一般我们常见的有两种表现形式:输入框内格式化和输入框外格式化。这里我主要把我在项目中遇到的输入框内部格式化的,代码亮出来,框外的格式化相对简单一点。

页面代码:

<div class="wrap">
    <input type="text"   placeholder="输入银行卡号">
</div>

<div class="wrap">
    <input type="text"   placeholder="输入金额">
</div>
银行卡号格式化
//卡号每4位一组格式化
        $("#bankCard").on("keyup", formatBC);

        function formatBC(e){

            $(this).attr("data-oral", $(this).val().replace(/ +/g,""));
            //$("#bankCard").attr("data-oral")获取未格式化的卡号

            var self = $.trim(e.target.value);
            var temp = this.value.replace(/D/g, '').replace(/(....)(?=.)/g, '$1 ');
            if(self.length > 22){
                this.value = self.substr(0, 22);
                return this.value;
            }
            if(temp != this.value){
                this.value = temp;
            }
        }

这里用“keyup”事件处理格式化,每4位数一组中间空格隔开。但是数据格式化以后又不利于计算,所以给当前元素添加一个属性“data-oral”,保存未处理的数字,这样计算或者要传递到后台可以获取“data-oral”的值。

金额格式化

金额格式化和银行卡号格式化类似,但又有点不同,因为金额每3位数一组用逗号隔开,一般最后有小数点且保留两位有效数字。这里我开始用到“keyup”和"change"事件,但是IE浏览器对于change事件存在兼容问题,可以改用focus和blur事件代替

类似给元素添加属性“data-oral”保存未格式化的数字。

/*
        * 金额每3位数一组逗号隔开格式化
        * 1.先把非数字的都替换掉
        * 2.由于IE浏览器对于change事件存在兼容问题,改用focus和blur事件代替。
        * */
        $("#moneyNum").on("keyup", formatMN);

        $("#moneyNum").on({
            focus: function(){
                $(this).attr("data-fmt",$(this).val()); //将当前值存入自定义属性
            },
            blur: function(){
                var oldVal=$(this).attr("data-fmt"); //获取原值
                var newVal=$(this).val(); //获取当前值
                if (oldVal!=newVal) {
                    if(newVal == "" || isNaN(newVal)){
                        this.value = "";
                        return this.value;
                    }
                    var s = this.value;
                    var temp;

                    if(/.+(..*.|-).*/.test(s)){
                        return;
                    }
                    s = parseFloat((s + "").replace(/[^d.-]/g, "")).toFixed(2) + "";
                    var l = s.split(".")[0].split("").reverse(),
                            r = s.split(".")[1];
                    t = "";
                    for(i = 0; i < l.length; i ++ ) {
                        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length && (l[i+1]!='-')? "," : "");
                    }
                    temp = t.split("").reverse().join("") + "." + r;
                    this.value = temp;
                    return this.value;
                }
            }
        });

        function formatMN(e){
            this.value = this.value.replace(/[^d.-]/g,"");
            $(this).attr("data-oral", parseFloat(e.target.value.replace(/[^d.-]/g, "")));
            //$("#moneyNum").attr("data-oral")获取未格式化的金额
        }

其实我觉得,输入框外的格式化更合理一些,大多数都是输入框外部格式化的,我写了个例子也拉出来吧。

输入框外部格式化卡号

原理很简单,就是隐藏一个显示格式化的模块,当输入框获取焦点时显示,失去焦点时隐藏即可。

输入框内格式化金额、银行卡号第1张

页面代码:

<div class="inputCard-wrap">
    <input type="text" class="inputCard">
    <div class="panelCard"></div>
</div>

<style type="text/css">
    .inputCard-wrap{
        position: relative;
    }
    .inputCard-wrap .panelCard{
        display: none;
        position: absolute;
        top:-34px;
        left:0;
        z-index: 100;
        background-color:#fff9da;
        border:1px #ffce6e solid;
        padding:10px;
        height:40px;
        font-size: 1.7em;
        line-height:18px;
        color:#585858;
    }
</style>

格式化代码:

    /* 银行卡号实时验证放大显示 */
    $(".inputCard").keyup(function(e){
        var self = $.trim(e.target.value),
            parent = $(e.target).closest(".inputCard-wrap"),
            panel = $(".panelCard", parent),
            val = self.replace(/D/g, '');
        if(self.length > 18){
            this.value = self.substr(0, 18);
            return this.value;
        }
        if(val == self){
            panel.show();
            val = self.replace(/(....)(?=.)/g, '$1 ');
            panel.html(val);
        }else{
            panel.hide();
            return self;
        }
    });
    $(".inputCard").unbind('focusin');
    $(".inputCard").bind('focusin',function(e){
        var self = $.trim(e.target.value),
            parent = $(e.target).closest(".inputCard-wrap"),
            panel = $(".panelCard", parent),
            val = self.replace(/(....)(?=.)/g, '$1 ');
        if(val != '') {
            panel.show();
            panel.html(val);
        }
    });
    $(".inputCard").unbind('focusout');
    $(".inputCard").bind('focusout',function(e){
        var parent = $(e.target).closest(".inputCard-wrap"),
            panel = $(".panelCard", parent);
        panel.hide();
    });

免责声明:文章转载自《输入框内格式化金额、银行卡号》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP函数stream_context_create()模拟POST/GETUbuntu 如何编译安装第三方库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

四舍五入[银行家算法]

  对于“四舍五入”的概念,相信大家都熟悉,因为小学三四年级就已经接触过了,常规算法这儿从略。 但对于银行家算法,也许有不少人比较生疏。近期学习中遇到了,也了解一下算法可以概括为“四舍六入五取偶”。那就是:(假设对小数部分进行舍入的话), 待舍入的部分恰好为0.5000,则需要看前面一位数的奇偶性,奇数则入,偶数则舍。 举几个例子来描述一下,比如:1.5...

JS实现input中输入数字,控制每四位加一个空格(银行卡号格式)

前言 今天来讲讲js中实现input中输入数字,控制每四位加一个空格的方法!这个主要是应用于我们在填写表单的时候,填写银行卡信息,要求我们输入的数字是四位一个空格!今天主要介绍两种方式来实现这个方法!但是都运用到了键盘码。下面我就列举一下键盘码,以备后面查阅! 键盘各按键对应的数字 keycode 8 = BackSpace | keyc...

超柔磨绒印花空调被(200*230cm) 凡客诚品工商银行团购专区 VANCL凡客诚品

超柔磨绒印花空调被(200*230cm) -凡客诚品工商银行团购专区- VANCL凡客诚品 超柔磨绒印花空调被(200*230cm) 【工行团购】仅售49元!超柔磨绒印花空调被,采用印花工艺,将漂亮的图案与优质产品面料完美结合,无论在感观还是手感上,都得到最大程度体现。聚酯纤维当前合成纤维的第一大品种,具有良好的弹性和蓬松性,产品色泽柔和,透气性良好,酷夏必...

支付宝转账到银行卡的二维码

作为一个搞技术的,看到了看到支付宝转账到银行卡二维码功能,就想着能不能做一个出来,因为这个东西非常方便,收款的人不需要注册支付宝 有些年纪大的人,没有注册支付宝,但是需要收款,怎么办,那就可以用这个办法。 制作网址 https://www.hotapp.cn/wap/zhimabank  做的二维码扫码后就是这样的...

银行卡的正则验证

let bankcardList = [{ bankName: "中国邮政储蓄银行", bankCode: "PSBC", patterns: [{ reg: /^(621096|621098|622150|622151|622181|622188|622199|955100|621095|620062|621285|6...