数字校验,及金额分割,input输入控制

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/jquery/jquery-1.10.2.min_65682a2.js">
</script>

</head>
<body>
<input type="text" id="usaExchangeRate" name="usaExchangeRate" οninput="validateNumFun(this,false,6,3)"/>
<script type="text/javascript">
    /**
     * <br>方 法 描 述:根据自定义的标准,校验数字的合法性
     * <br>创 建 人:jinzhaoqiang
     * <br>创建时间:2018/6/15 9:53
     * <br>修改备注:无
     */
    function checkNum(value,param,th,split){
        // 输入值为空,或者传入参数不完整则不进行校验,整数位不应小于1位,小数位不应小于0位
        if(!value || !param || param.length!=3 || param[1]<=0 || param[2]<0)
            return true;
        // 将分隔符去掉
        if (split)
            value = value.split(split).join('');
        // 判断是否为数字
        if(value.match(/^-?\d*\.?\d*$/)){
    
            var isNeg = false;
            var intPart = "";
            var fracPart = "";
            var strval =  value + "";
            var intPartAfter = "";
            var fracPartAfter = "";
    
            // 将数字分为符号位、整数位、小数位三部分
            if(strval[0]=="-") {
                isNeg = true;
                strval = strval.substr(1);
            }
            if(strval.indexOf('.')!=-1){
                intPart = strval.substr(0,strval.indexOf("."));
                fracPart = strval.substr(strval.indexOf(".")+1);
            }else{
                intPart = strval;
            }
    
            // 判断是否满足位数(整数位、小数位)限制,符号位限制
            if(intPart.length<=param[1] && fracPart.length<=param[2] && (param[0] || !isNeg)){
    
                //以无意义的0开头,去除多余的0
                var intPart2 = "";
                if (intPart.length>1 && intPart.match(/^0.*$/)) {
                    intPart2 = intPart.replace(/0+/,'');
                    if (!intPart2)
                        intPart2 = "0" + intPart2;
                    if (intPart != intPart2) {
                        intPart = intPart2;
                    }
                }
    
                var fr2 = "";
                if (isNeg) fr2 = fr2 + "-";
                if (intPart) fr2 = fr2 + intPart;
                if (param[2]>0){
                    if (strval.indexOf('.')!=-1)
                        fr2 = fr2 + ".";
                    if (fracPart)
                        fr2 = fr2 + fracPart;
    
                }
    
                if (fr2 != value){
                    fr2 = addSplit4Num(fr2,split);
                    $(th).val(fr2);
                    return false;
                }
                fr2 = addSplit4Num(fr2,split);
                $(th).val(fr2);
                return true;
            }
    
            // 位数不满足要求,进行规范化
            if (intPart.length>1 && intPart.match(/^0.*$/)) {
                intPart = intPart.replace(/0+/,'');
                if (!intPart)
                    intPart = "0" + intPart;
            }
            intPartAfter = intPart.substr(0,param[1]);
            fracPartAfter = fracPart.substr(0,param[2]);
            var fr = intPartAfter;
            if(fracPartAfter)
                fr = fr + "." + fracPartAfter;
            if(param[0] && isNeg){
                fr = "-" + fr;
            }
            fr = addSplit4Num(fr,split);
            $(th).val(fr)
    
        }else{
            var fr = "";
            var str = "";
            var intPart = "";
            var fracPart = "";
            var isDot = false;
            if (value[0]=="-"){
                str = value.substr(1);
                fr = fr +"-";
            }else{
                str = value;
            }
            if (str.indexOf(".")!=-1) {
                isDot = true;
                intPart = str.substr(0,str.indexOf("."));
                fracPart = str.substr(str.indexOf(".")+1);
            }else{
                intPart = str;
            }
            // 将非数字字符清空
            if (intPart) {
                while(!intPart.match(/^\d*$/) && intPart){
                    intPart = intPart.replace(/[^\d]+/,'');
                }
                if (intPart)
                    fr = fr + intPart;
            }
            if (param[2]>0 && isDot) fr = fr + ".";
            if (param[2]>0 && fracPart && (fracPart = fracPart.replace(/\..*/,''))) {
                while(!fracPart.match(/^\d*$/) && fracPart){
                    fracPart = fracPart.replace(/[^\d]+/,'');
                }
                if (fracPart)
                    fr = fr + fracPart;
            }
            fr = addSplit4Num(fr,split);
            $(th).val(fr);
        }
        return false;
    }
    
    /**
     * <br>方 法 描 述:增加分隔符  如 222,321,1
     * <br>参 数 说 明:data:要被格式化的数值,split:分隔符
     * <br>创 建 人:jinzhaoqiang
     * <br>创建时间:2018/6/15 9:50
     * <br>修改备注:无
     */
    function addSplit4Num(data,split){
        if (!split || !data) return data;    //数据为空,或分隔符为空,直接返回
        data = data + "";
        var fr = "";
        var isNeg = false;
        if (data[0]=="-"){
            isNeg = true;
            data = data.substr(1);
        }
        for (var i = 0,j=0; i < data.length; i++,j++) {
            if (data[j]==".") j=-1;
            if (j%3==0 && j!=0 && fr.indexOf('.')==-1) fr = fr + split;
            fr = fr + data[i];
        }
        if (isNeg) fr = "-" + fr;
        return fr;
    }
    
    
    /**
     * <br>方 法 描 述:限制input输入,校验数字的合法性,以及格式化数值(添加分隔符)
     * <br>参 数 说 明:
     *      obj: 当前对象,
     *      allowNegative: 是否允许为负 true:允许  false:不允许,
     *      positiveNumLen: 整数位长度,
     *      negativeNumLen: 小数位长度,0表示不允许输入小数
     *      split: 分隔符 不传值则不分隔("," 效果:23,667,231)
     * <br>调 用 方 式:<input type="text" οninput="validateNumFun(this,true,6,5,',')"/>
     * <br>创 建 人:jinzhaoqiang
     * <br>创建时间:2018/6/15 9:54
     * <br>修改备注:无
     */
    function validateNumFun(obj,allowNegative,positiveNumLen,negativeNumLen,split){
        var value = $(obj).val();
        var param = [];
        param.push(allowNegative);
        param.push(positiveNumLen);
        param.push(negativeNumLen);
        return checkNum(value,param,obj,split);
    }
</script>
</body>
</html>

转载于:https://my.oschina.net/u/2351011/blog/1830122

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值