js 校验小方法

可以百度js在线运行,把js代码复制进去,进行运行打印结果测试 

1.控制,只能输入多少位小数

/**
 * 对输入金额进行校验
 * obj 输入框对象
 * 比如在input元素中,写onkeyup="moneyValidate(this,6)"
 */
 function moneyValidate(obj,decimal){
     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("$#$",".");
     if(decimal){
         var reg = new RegExp("^(\\-)*(\\d+)\\.(\\d{0,"+decimal+"}).*$");
         obj.value = obj.value.replace(reg,'$1$2.$3');
     }
 }

2.保留小数,并向上进一位


 /**
  * 向上保留小数(只要目标小数位后有有效数字就进1,保证计算后的数值一定不小于原数值)
  * 返回的结果,并保留fix为小数
  * 比如upFixed(13.451,2)=13.46,upFixed(12,2)=12.00
  * @param num
  * @param fix
  * @returns
  */
 function upFixed(num, fix) {
     // 如果是0,则返回0.00(fix位)
     if(Number(num) == 0){
        //    return '0' + `.${Array(fix + 1).join('0')}`;
         return '0' + '.'+(new Array(fix + 1).join('0'));
      }
     
      // num为原数字,fix是保留的小数位数
      let result = '0';
      if (Number(num) && fix > 0) { // 简单的做个判断
        fix = +fix || 2;
        num = num + '';
        if (/e/.test(num)) { // 如果是包含e字符的数字直接返回
          result = num;
        } else if (!/\./.test(num)) { // 如果没有小数点
         // result = num + `.${Array(fix + 1).join('0')}`;
             result = num + '.'+(new Array(fix + 1).join('0'));
        } else { // 如果有小数点
        //  num = num + `${Array(fix + 1).join('0')}`;
            num = num + (new Array(fix + 1).join('0'));
       //   var reg = new RegExp(`-?\\d*\\.\\d{0,${fix}}`);
            var reg = new RegExp("-?\\d*\\.\\d{0,"+fix+"}");
          let floorStr = reg.exec(num)[0];
          if (+floorStr >= +num) {
            result = floorStr;
          } else {
        //    var floorNumber = +floorStr + +`0.${Array(fix).join('0')}1`;
              var floorNumber = Number(floorStr) + Number( ('0.'+(new Array(fix).join('0'))+'1'));
            var point = /\./.test(floorNumber + '') ? '' : '.'
      //      var floorStr2 = floorNumber + point + `${Array(fix + 1).join('0')}`;
            var floorStr2 = floorNumber + point + (new Array(fix + 1).join('0'));
            result = reg.exec(floorStr2)[0];
          }
        }
      }
      return result;
    }

3.保留多少位小数,向下取


 /**
  * 向下保留小数(目标小数位后的数字直接舍弃,保证计算后的数值一定不大于原数值)
  * 返回的结果,并保留fix为小数
  * 比如downFixed(13.456,2)=13.45,upFixed(12,2)=12.00
  * @param num
  * @param fix
  * @returns
  */
 function downFixed (num, fix) {
	// 如果是0,则返回0.00(fix位)
	 if(Number(num) == 0){
		 return '0' + '.'+(new Array(fix + 1).join('0'));
	  }
	  // num为原数字,fix是保留的小数位数
	  var result = '0';
	  if (Number(num) && fix > 0) { // 简单的做个判断
	    fix = +fix || 2;
	    num = num + '';
	    if (/e/.test(num)) { // 如果是包含e字符的数字直接返回
	      result = num;
	    } else if (!/\./.test(num)) { // 如果没有小数点
	    //  result = num + `.${Array(fix + 1).join('0')}`;
	    	result = num + '.'+(new Array(fix + 1).join('0'));
	    } else { // 如果有小数点
	  //    num = num + `${Array(fix + 1).join('0')}`;
	    	num = num + (new Array(fix + 1).join('0'));
	   //   var reg = new RegExp(`-?\\d*.\\d{0,${fix}}`);
	    	   var reg = new RegExp("-?\\d*.\\d{0,"+fix+"}");
	      result = reg.exec(num)[0];
	    }
	  }
	  return result;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值