javascript数字计数器中的错误

时间:2014-04-07 15:09:48

标签: 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");
    }
}

5 个答案:

答案 0 :(得分: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");
    }
}

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

答案 1 :(得分:6)

根据MDN,isNaN is broken

  

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

我会推荐这样的东西:

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

48是'0'的字符代码,57是'9'的字符代码。

答案 2 :(得分:3)

使用此:

function() {
    var text = input.value.replace(/\s+/g,""); //removes spaces
    var totalNrOfDigits = 0;
    for(var i = 0; i < text.length; i++){
        if(!isNaN(text[i])){
            totalNrOfDigits++;
        }
    }
    if(totalNrOfDigits < 10){
        alert("Invalid input");
    }
}

答案 3 :(得分:3)

上述答案的替代方案:

function(){
    var text = input.value;
    var totalNrOfDigits = 0;
    for(var i = 0; i < text.length; i++){
        if(/\d/.test(text[i])){
            totalNrOfDigits++;
        }
    }
    if(totalNrOfDigits < 10){
        alert("Invalid input");
    }
}

Here's an updated JSFiddle

答案 4 :(得分:1)

你可以使用

var totalNrOfDigits = input.value.match(/\d/g).length;
if(totalNrOfDigits < 10)
    alert("Invalid input");

Demo