input 如何控制input输入框的数值:小数点前N位,小数点后M位(例如:js 实现input输入框内数值的小数点前2位后3位数的控制...)

参考博文:(33条消息) html input 小数点后两位,js 实现input输入框内数字的小数点前八位后二位数的控制..._weixin_39612038的博客-CSDN博客

直接上代码:

// input输入框,控制输入框的数值格式,小数点前N位数与小数点后M位数控制
    function inputNumByNM(obj, N, M) { // N:表示取小数点前N位
        obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
        obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
        obj.value = obj.value.replace(/\.{2,}/g,""); //只保留第一个, 清除多余的
        obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
        var temp = obj.value;
        if (temp < 0) {
            obj.value = "";
            return;
        }
        // 返回指定字符在此字符串中第一次出现处的索引
        var posDot = temp.indexOf(".");
        // 不包含小数点
        if (posDot < 0) {
            if (temp.length <= N) {
                return; // 小于等于N位数直接返回
            } else {
                // 大于N位数就删掉第N+1位(只会保留N位)
                if (temp.length > N) {
                    obj.value = temp.substring(1, N + 1);
                }
                return;
            }
        }
        var lastDot = temp.lastIndexOf(".");
        if (posDot != lastDot) {
            obj.value = "";
            return;
        }
        //走到这有小数点
        if (posDot > N) {
            // 大于N位数就删掉第N+1位(只会保留N位)
            if (temp.length > N) {
                obj.value = temp.substring(1, N + 1);
            }
            return;
        }
        //如果包含小数点(项目上的特殊需求:小数点前不超过3位,则控制小数点后最多3位,小数点前为3位,则控制小数点后最多2位)
        if (temp.length - posDot - 1 > 2) {
            if (posDot < 3) {
                // 删除小数点后的第M位
                obj.value = temp.substring(0, posDot + M + 1);
            } else {
                // 删除小数点后的第M-1位
                obj.value = temp.substring(0, posDot + M);
            }
        }

        // 如果包含小数点
        /*if (temp.length - posDot - 1 > 2) {
            // 删除小数点后的第三位
            obj.value = temp.substring(0, posDot + 3);
        }*/

    };

 

posted @ 2022-04-08 12:16  向着阳光漫步  阅读(686)  评论(0编辑  收藏  举报