4

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

我的功能如下:

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

  { 
    alert ("problem")
  }

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

解决这个问题有什么帮助吗?我尝试查看 indexOf 的数组,但并没有真正理解它,所以如果您要建议它,请尽可能详细地解释。

谢谢

4

3 回答 3

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;
    }
}
于 2012-04-07T02:51:41.300 回答
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;
  }
}
于 2012-04-07T02:52:00.960 回答
3

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

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

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

于 2012-04-07T02:56:36.513 回答