我有一个脚本,我正在努力工作。基本上,我要做的是阻止某人在某个字段中输入特殊字符。
我的功能如下:
var iChars = "!@#$%^&*()+=[];,./{}|<>?;";
if (field1.value.indexOf(iChars) !=-1)
{
alert ("problem")
}
我遇到的问题是该字段正在搜索与iChars var的完全匹配,而不是匹配任何单个值。例如,如果我创建一个var test =“one”并在字段中输入“one”,它将返回错误,但是如果我在字段中输入“o”,它不会返回任何内容而只是传递给下一个脚本的一部分 - 但如果我输入“none”或“oneeee”,它将推动错误。
有关修复此问题的任何帮助吗?我试着查看indexOf的数组但是并没有真正理解它,所以如果你打算建议它,请尽可能详细地解释。
由于
答案 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");
}
这条路线应该比自己迭代字符串中的每个字符更有效率,并且对正则表达式训练的眼睛(或者至少在我明显有偏见的意见中)更容易阅读。