我的下面的脚本会检查表单输入是否包含至少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");
}
}
答案 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");
}
}
答案 4 :(得分:1)
你可以使用
var totalNrOfDigits = input.value.match(/\d/g).length;
if(totalNrOfDigits < 10)
alert("Invalid input");