indexOf()函数返回-1值

时间:2012-04-07 02:49:00

标签: javascript

我有一个脚本,我正在努力工作。基本上,我要做的是阻止某人在某个字段中输入特殊字符。

我的功能如下:

var iChars = "!@#$%^&*()+=[];,./{}|<>?;";
if (field1.value.indexOf(iChars) !=-1)

  { 
    alert ("problem")
  }

我遇到的问题是该字段正在搜索与iChars var的完全匹配,而不是匹配任何单个值。例如,如果我创建一个var test =“one”并在字段中输入“one”,它将返回错误,但是如果我在字段中输入“o”,它不会返回任何内容而只是传递给下一个脚本的一部分 - 但如果我输入“none”或“oneeee”,它将推动错误。

有关修复此问题的任何帮助吗?我试着查看indexOf的数组但是并没有真正理解它,所以如果你打算建议它,请尽可能详细地解释。

由于

3 个答案:

答案 0 :(得分:3)

你可以使用......

var value = field1.value;

for (var i = 0, length = value.length; i < length; i++) {
    if (iChars.indexOf(value.charAt(i)) != -1) {
       alert('Problem!');
       break;
    }
}

答案 1 :(得分:3)

问题是您正在寻找用户输入中整个iChars字符串的索引。您实际想要做的是查看iChars中的任何字符是否在输入字符串中。为此,请使用for循环

var iChars = "!@#$%^&*()+=[];,./{}|<>?;";
var i;
for (i = 0; i < iChars.length; i++) {
  if (field1.value.indexOf(iChars[i]) !== -1) {
    alert("problem");
    break;
  }
}

答案 2 :(得分:3)

您也可以检查正则表达式:

var iChars = /[!@#$%^&*()+=[\];,./{}|<>?;]/;
if (iChars.test(field1.value)) {
    alert("problem");
}

这条路线应该比自己迭代字符串中的每个字符更有效率,并且对正则表达式训练的眼睛(或者至少在我明显有偏见的意见中)更容易阅读。