引用方式
<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组件