input输入框是能输入正整数和小数

1,450 阅读1分钟

保留两位小数

<input type='text' oninput="clearNoNum(this)">
 let clearNoNum = function(obj){
  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("$#$" ,".");
        obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');//只能输入两个小数
        if(obj.value.indexOf(".")< 0 && obj.value !=""){//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
            obj.value= parseFloat(obj.value);
        }
    }

只能输入正整数

<input type='text' oninput="replaceFloat(this)">
const replaceValue = function (obj) {
        if (obj.value.length===1) {
          obj.value = obj.value.replace(/[^\d]/g, ''); //只存在一位时可以输入0
        }else{
          obj.value = obj.value.replace(/^0/g, ''); //1位以上第一位不能为0
          obj.value = obj.value.replace(/[^\d]/g, '');
        }
      };

需要注意的是:如果是vue项目,方法必须写在index.html里面的script标签里,不能写在组件里面,不然找不到. 使用onkeyup,和onchange都会存在一些bug