js 如何限制input只能输入数字小数点且只能输4位小数

如题,我现在有4个input,4个input从输入开始都有只能输入数字和小数点且小数点后只能输入4位小数的限制,如果输入的格式不对,比如我写了一个s进去,这个s就写不进去了,要用到key事件,应该如何解决,求解答

阅读 11.7k
4 个回答
<input  type="text" onkeyup="clearNoNum(this)">
function clearNoNum(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\d\d\d\d).*$/,'$1$2.$3'); //只能输入两个小数
    

        $('input[name="buyMoney"]').val(accMul($('input[name="buyPrice"]').val(),$('input[name="buyVal"]').val()));

        $('input[name="saleMoney"]').val(accMul($('input[name="salePrice"]').val(),$('input[name="saleVal"]').val()));
    }

    // 解决浮点数
    function accMul(arg1,arg2){
        {   
            if(arg1 == undefined || arg2 == undefined){
                return
            }
            var m=0,s1=arg1.toString(),s2=arg2.toString();   
            try{m+=s1.split(".")[1].length}catch(e){}   
            try{m+=s2.split(".")[1].length}catch(e){}   
            return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)   
        }
    }

正则验证一下就可以了

/^(-?\d+)(\.\d{4})?$/
<input id="input">

var input = document.getElementById('input');

var reg = /^\d+(\.)?\d{0,4}?$/;

var oldValue = ''

input.addEventListener('input',function(e){
  if(reg.test(e.target.value)){ 
    oldValue = e.target.value
  }else if(e.target.value){
    e.target.value = oldValue;
  } else{
    e.target.value = '';
    oldValue = '';
  }
});

input.addEventListener('change',function(e){
  if(e.target.value.endsWith('.')){
    e.target.value = e.target.value.slice(0,-1);
   } 
});

我自己常用的,可以拿去改改

function onlyNumber(num) {
  var n = String(num)
  var t = n.charAt(0)
  // 先把非数字的都替换掉,除了数字和.
  n = n.replace(/[^\d\.]/g, '')
  // 必须保证第一个为数字而不是.
  n = n.replace(/^\./g, '')
  // 保证只有出现一个.而没有多个.
  n = n.replace(/\.{2,}/g, '.')
  // 保证.只出现一次,而不能出现两次以上
  n = n.replace('.', '$#$').replace(/\./g, '').replace(
    '$#$', '.')
  // 如果第一位是负号,则允许添加
  if (t === '-') {
    n = '-' + n
  }
  return n
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题