美文网首页
INPUT 只能输入数字(且固定整数长度、小数长度最大长度)

INPUT 只能输入数字(且固定整数长度、小数长度最大长度)

作者: M_ENG | 来源:发表于2018-12-21 10:45 被阅读0次
    
    <input type="text"  onchange="this.value=validateNumber(8,2,this.value)" 
    onkeyup="this.value=validateNumber(8,2,this.value)" 
    onkeydown="this.value=validateNumber(8,2,this.value)" />
    
    
    /**
     * 正数 范围  有小数 设置type=number 默认将.结尾的去掉
     * @param precision
     * @param scale
     * @param value
     * @returns {*}
     */
    function validateNumber(precision,scale,value)
    {
        //不符合 数字
        if (isNaN(value))
        {
            if(value == '.')
            {
                return "";
            }
    
            // 两个.  不符合规范
            if(value.split('.').length > 2)
            {
                return $.trim(value.substr(0,value.length-1));
            }
            //解决 中文输入bug
            return $.trim(value.replace(/[^0-9|^.]/g,''));
        }
    
    
        var tmpVal = parseFloat(value);
    
        if(value != "")
        {
            var valueArray = value.split('.');
    
            //去前缀0   例如 01 001
            if(value.indexOf('.') == value.length - 1)
            {
                value = parseFloat(value);
    
                value = value + ".";
            }
            else if(valueArray.length == 2)
            {
                value = parseFloat(value);
    
                var val1 = parseFloat(valueArray[1]);
    
                if(val1 == 0)
                {
                    value = value + ".";
    
                    for(var i = 0; i < valueArray[1].length; i++)
                    {
                        value += "0";
                    }
                }
                else
                {
                    value = value + "";
                }
            }
            else
            {
                value = parseFloat(value);
    
                value = value + "";
            }
    
        }
    
        var maxVal = '';
    
        //var minVal = '-'; //如果还需要判断负数 将0换成minVal
    
        if(precision <= 0 || scale < 0 || scale > precision)
        {
            alert("validateNumber函数参数错误!");
    
            return '';
        }
    
        //整数位数小
        for (var i = 0;i < precision-scale; i++)
        {
            maxVal += '9';
        }
    
        //有小数
        if(scale > 0)
        {
            maxVal += '.';
    
            for(var i = 0;i < scale;i++)
            {
                maxVal += '9';
            }
        }
        else
        {
            //判断是否有小数  删除小数点和小数点后面的数
            if((value.indexOf('.')+1) > 0)
            {
                return $.trim(value.substr(0,value.length-1));
            }
        }
    
        if(tmpVal >= 0 && tmpVal <= maxVal)
        {
            if(scale > 0)
            {
                //判断是否有小数   小数长度不能超过scale
                if(value.indexOf('.') > 0)
                {
                    if(value.substr(value.indexOf('.')+1,value.length-1).length > scale)
                    {
                        return $.trim(value.substr(0,value.length-1));
                    }
                }
            }
    
            return $.trim(value);
        }
        else
        {
            return $.trim(value.substr(0,value.length-1));
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:INPUT 只能输入数字(且固定整数长度、小数长度最大长度)

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