关于javascript中的数字处理问题

一个输入框:

<input type="text" id="intNum" />

仅限输入数字,比如数字可以为:123,-123,1.5,-1.5
这些都好说,不是太难,但是遇到这样的又如何处理?如:00005,-000000.5,45-12

贴下我写的,很烂乱入法眼莫乱,就忍忍吧!

$("#intNum").bind("keypress", function(event) {
    var getValue = $(this).val();
    //控制第一个不能输入小数点"."
    if (getValue.length == 0 && event.which == 46) {
        event.preventDefault();
        return;
    }
    //控制只能输入一个小数点"."
    if (getValue.indexOf('.') != -1 && event.which == 46) {
        event.preventDefault();
        return;
    }
    //控制只能输入一个负号"-"
    if (getValue.indexOf('-') != -1 && event.which == 45) {
        event.preventDefault();
        return;
    }
    //控制只能输入的值
    if (event.which && (event.which < 48 || event.which > 57) && event.which != 8 && event.which != 46 && event.which != 45) {
        event.preventDefault();
        return;
    }
})
//失去焦点是触发
$("#intNum").bind("blur", function(event) {
    var value = $(this).val();
    if (/\.$/.test(value)) {   // 最后一位为小数点去掉
        value = value.replace(/\.$/, "");
    }else if(/0+\./.test(value)){  // 小数去0
        value =value.substr(0,1)!="-"?value.replace(/0+\./, "0."):value.replace(/0+\./, "0.");
    }else if(/^0+/.test(value)){   // 正数去0
        value = value.replace(/^0+/, "");
    }
    $(this).val(value);
})

现在遇到的问题就是这么处理45-56,这样的情况,因为我只限制输入一次“-”号,如果是“-5646”,这样没问题,问题就出在怎么确保第一个字符为“-”号!
还有就是代码写的不好,能优化则优化!求救大牛!!!!!

不知道是我没表达清楚还是怎么得,就是失去焦点的时候,得到的是这样的:比如:1最后显示1,-1最后显示-1,12.5最后显示12.5,-0.55最后显示-0.55,000006最后显示6,-00000056最后显示-56,00000000.78最后显示0.78,-0000000.456最后显示0.456,45-78最后显示-33,10-5最后显示5,15.最后显示15,23-最后显示23.....


以下是我想要的代码

这才是我想要的结果,谢谢@hsfzxjy和@司徒正美

function isValidNumber(str) {
    return !isNaN(+str)
}

$("#intNum").bind("blur", function(event) {
    var newValue="";
    var getValue = $(this).val();
    if(isValidNumber(getValue)){
        newValue = +getValue;
    }else if(newValue==""){
        alert("输入的不为数字");
        $(this).val("");
    }
    $(this).val(newValue);
})
阅读 2.8k
4 个回答
function isValidNumber(str) {
    return !isNaN(+str)
}
var old = ""
$("#intNum").bind("keypress", function(event) {
    var value = this.value
    //如果是空字符串或数字不做处理
    if(isFinite(value) || value == ''){
       old = value
       return
    }
    //有问题则使用上次的代替
    this.value = old
})

同学……你写的好复杂……
我看你就是想判断这个数字是不是合法的数字嘛……
那不是有内建的构造函数Number做类型转换的吗,非法数字都会被转换成NaN

function isNumber(num) {
    return(Number.isNaN(Number(num));
}

谢谢邀请。楼上的几位同学的方法都可以参考。isNaN函数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题