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、入力文字列に char in があるかどうかを確認することです。これを行うには、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 に答える