【js工具函数】input框输入正负数字,限制大小,小数点位数,是否可以为0

引用方式

<input oninput="inputInputNumFn(this,3,true,true,100,-100)" onblur="inputBlurNumFn(this,3,true,true,100,-100)"/>
<script>
 //type为可保留几位小数
 //zero是否允许结果为0
 //neg 是否允许为负数
 //maxVal 最大值 null为没有最大值
 //minVal 最小值 null为没有最小值
 //oninput与onblur要搭配使用,并且参数一致
 
 //失去焦点onblur事件的额外处理
 function inputBlurNumFn(obj,type=0,zero=true,neg=false,maxVal=null,minVal=null){
     var nim = parseInt(type)
     var strval = $(obj).val();
     if(strval && !zero && nim > 0){//不可为零,但又有小数
     	if(strval*1 === 0){
             strval = '';
        }
     }
     if(strval && zero){
         if(strval*1 === 0){
             strval = '0';
         }
     }
     if(zero && (strval==='-' || strval === '-.')){
         strval='0';
     }else if(!zero && strval==='-' || strval === '-.'){
         strval=''
     }

     if(nim > 0 && strval.match(/\./)){
         var reg = new RegExp("[\\d|\-]+\.(\\d*)")
         strval = strval.replace(reg,function(){
             var addZero = nim - arguments[1].length;
             for(var i = 0;i<addZero;i++){
                 arguments[3] = arguments[3] + "0"
             }
             return arguments[3]
         })
     }else if(strval && nim > 0 && !strval.match(/\./)){//默认补全所有小数为0
         strval+= '.';
         for(var i = 0;i<nim;i++){
             strval+= '0'
         }
     }
     if(maxVal != null){
         (strval >= maxVal) ? strval=maxVal : '';
     }
     if(minVal != null){
        (strval <= minVal) ? strval=minVal : '';
     }
     $(obj).val(strval)
 }
 //oninput事件处理
 function inputInputNumFn(obj,type=0,zero=true,neg=false,maxVal=null,minVal=null){
     var dian = 0;
     var nim = parseInt(type)

     var strval =  $(obj).val().replace(/\./g, function() {
         return (dian++ === 0) ? '.' : '';
     });//只保留一位.
     
     //去除开头是.
     strval = strval.replace(/^(\.)/,'')
     if(neg){
        strval = strval.replace(/^(\-([^\-])*)(\-)/g,function(){//只保留首位的负号
            return arguments[1]
        })
        strval = strval.replace(/[^\d|\.|\-]/g,function(){//替换所有非- . 和数字
            return ''
        })
        //去除-号后跟多个0
     }else{
        strval = strval.replace(/[^\d|\.]/g,function(){//替换所有非.和数字
            return ''
        })
     }
     //去除开头多个0,只保留一个0
     strval = strval.replace(/^([\-]?0{1})(0+)/,function(){
         return arguments[1]
     })
     //去除0开头的的整数
     strval = strval.replace(/^([\-]?)(0)(\d+)/,function(){
         return arguments[1] + arguments[3]
     })
     if(!zero && nim<=0){//不可为零,且无小数
         strval = strval.replace(/^[\-]?(0+)/,'')
     }
     //保留几位小数
     if(nim > 0){
         var reg = new RegExp("(\.\\.\\d{" + nim + "})(\.+)")
         strval = strval.replace(reg,function(){
             return arguments[1]
         })
     }else{
         var reg = new RegExp("(\.*?)(\\.\\d*)")
         strval = strval.replace(reg,function(){
             return arguments[1]
         })
     }
     
     $(obj).val(strval)
 }
</script>

欢迎大家有什么bug在文下提出来,我会一直优化,后期会做成ui组件

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值