美文网首页
金额处理的正则

金额处理的正则

作者: 静候那一米阳光 | 来源:发表于2017-03-09 10:48 被阅读0次

    将输入的字符串转化为合法金额

    • 不允许数字和点之外的字符。
    • 金额头不允许多个0。
    • 如果金额大于1,不能以零开头。
    • 如果金额小于1,需要以零开头,即不允许以点开头。
    • 只允许一个小数点。
    • 必须(至少)保留两位小数,多于两位小数时去掉两位小数后多余的尾零。
    • 千分位显示(加逗号)。

    【代码清单】

    /*金额处理校验函数*/
    function check(val){
        val = val.replace(/[^\d\.]/g, ''); //去掉非法字符
        /^0+([0-9]+)/.test(val)&&(val=RegExp.$1);//去零(数字前的零)
        /^\..*/.test(val)&&(val="0"+val);//小数点开头补零
        /^(.*\..*)\.$/.test(val)&&(val=RegExp.$1);//去掉多余的小数点
        /^(.*\.\d\d).*$/.test(val)&&(val=RegExp.$1);//只保留两位小数
        return val;
    }
    /*金额规格化*/
    function regular(val){
        /^(.*)\.$/.test(val)&&(val=RegExp.$1);//以点结尾去点
        /^(\d)+$/.test(val)&&(val=val+".00");//整数补.00
        /^.*\.[0-9]$/.test(val)&&(val=val+"0");//一位小数补0
        /^(.*\.\d\d(\d*[0-9])*)0+$/.test(val)&&(val=RegExp.$1);//去掉两位小数后的多余的0
        return val;
    }
    /*金额千分位*/
    function addComma(val){
        var regPointer=/(.*)\.(.*)/;
        if (regPointer.test(val)){
            var beforePointer=RegExp.$1;
            var afterPointer=RegExp.$2;
            val=beforePointer.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,')+"."+afterPointer;
        }else{
            val=val.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
        }
        return val;
    }
    

    此函数传入的参数需要时只包含0-9与小数点的数字,这个在输入框输入的时候进行按键判断处理比较好。

    一般来说在输入的时候执行 check(val) 与 addComma(val)函数。
    在输入框失去焦点时执行 regular(val) 与 addComma(val)函数。

    注意千分位数值与原始数值建议使用两个变量保存。

    【完整Demo】

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>金额输入处理</title>
        <script>
        /*金额处理校验函数*/
        function check(val) {
            val = val.replace(/[^\d\.]/g, ''); //去掉非法字符
            /^0+([0-9]+)/.test(val) && (val = RegExp.$1); //去零(数字前的零)
            /^\..*/.test(val) && (val = "0" + val); //小数点开头补零
            /^(.*\..*)\.$/.test(val) && (val = RegExp.$1); //去掉多余的小数点
            /^(.*\.\d\d).*$/.test(val) && (val = RegExp.$1); //只保留两位小数
            return val;
        }
        /*金额规格化*/
        function regular(val) {
            /^(.*)\.$/.test(val) && (val = RegExp.$1); //以点结尾去点
            /^(\d)+$/.test(val) && (val = val + ".00"); //整数补.00
            /^.*\.[0-9]$/.test(val) && (val = val + "0"); //一位小数补0
            /^(.*\.\d\d(\d*[0-9])*)0+$/.test(val) && (val = RegExp.$1); //去掉两位小数后的多余的0
            return val;
        }
        /*金额千分位*/
        function addComma(val) {
            var regPointer = /(.*)\.(.*)/;
            if (regPointer.test(val)) {
                var beforePointer = RegExp.$1;
                var afterPointer = RegExp.$2;
                val = beforePointer.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,') + "." + afterPointer;
            } else {
                val = val.replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
            }
            return val;
        }
    
        function input() {
            let val = check(document.getElementById("input").value);
            document.getElementById("input").value = val;
            document.getElementById("text").innerText = addComma(val);
        }
    
        function change() {
            let val = regular(document.getElementById("input").value);
            document.getElementById("input").value = val;
            document.getElementById("text").innerText = addComma(val);
        }
        </script>
    </head>
    
    <body>
        <input type="text" id="input" oninput="input()" onchange="change()">
        <div id="text"></div>
    </body>
    
    </html>
    

    相关文章

      网友评论

          本文标题:金额处理的正则

          本文链接:https://www.haomeiwen.com/subject/fprwgttx.html