javascript数字计数器中的错误

Mal*_*rte 3 javascript

我的下面的脚本检查表单输入包含至少10位数,除了其他文本.一切正常,除了它还将空格视为数字.有人可以帮忙解决这个问题吗?

Jsfiddle:http://jsfiddle.net/BG4du/

function(){
    var text = input.value;
    var totalNrOfDigits = 0;
    for(var i = 0; i < text.length; i++){
        if(!isNaN(text[i])){
            totalNrOfDigits++;
        }
    }
    if(totalNrOfDigits < 10){
        alert("Invalid input");
    }
}
Run Code Online (Sandbox Code Playgroud)

Ami*_*oki 6

做这个:

function(){
    var text = input.value.replace(/\s/g,"");
    var totalNrOfDigits = 0;
    for(var i = 0; i < text.length; i++){
        if(!isNaN(text.charAt(i))){
            totalNrOfDigits++;
        }
    }
    if(totalNrOfDigits < 10){
        alert("Invalid input");
    }
}
Run Code Online (Sandbox Code Playgroud)

replace(" ","")只是取代第一次出现.我的解决方案删除了​​所有空格.


p.s*_*w.g 6

据MDN称,isNaN已被打破

isNaN函数规范的最早版本开始,它对非数字参数的行为一直令人困惑.当isNaN函数的参数不是类型时Number,该值首先被强制转换为a Number.然后测试结果值以确定它是否是NaN.因此,对于非数字,当强制转换为数字类型时会产生有效的非NaN数字值(特别是空字符串和布尔基元,当强制赋予数值0或1时),"错误"返回值可能是意外的; 例如,空字符串肯定是"不是数字"....

我推荐这样的东西:

var code = text.charCodeAt(index);
if(code >= 48 && code <= 57){
    totalNrOfDigits++;
}
Run Code Online (Sandbox Code Playgroud)

48是字符代码'0',57是字符代码'9'.