2012-04-07 8 views
4

私は働くことを試みているスクリプトを持っています。基本的に、私がやっていることは、誰かがフィールドに特殊文字を入力するのを防ぐことです。-1を返すためのindexOf()関数

次のように私が持っている機能は次のとおりです。

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

    { 
    alert ("problem") 
    } 

私がいる問題は、フィールドがiCharsのVARに完全に一致する検索の代わりに、任意の単一の値に一致していることです。たとえば、var test = "one"を作成してフィールドに "one"を入力すると、エラーが返されますが、フィールドに "o"を入力すると何も返されず、次のフィールドに渡されます私が "none"または "oneeee"と入力した場合、エラーが発生します。

これを修正するためのヘルプがありますか?私はindexOfの配列を調べてみましたが、実際にはそれを理解していないので、できるだけ詳しく説明してください。

ありがとうございますが、使用することができ

答えて

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; 
    } 
} 
+0

素晴らしいですが、アラートの数を1つに制限する方法はありますか?私が入れたら!私は2つのアラートを取得する、私はそれを抑制することはできますか? – Umeed

+1

@Umeed 'break'は1つのアラートに制限するべきです。 – alex

+0

ありがとう、私は休憩を忘れてしまった! – Umeed

3

問題は、ユーザー入力で全体iChars文字列のインデックスを探しています。あなたが実際にしたいことは、入力文字列にiCharsの文字があるかどうかを確認することです。このルートは、もう少し効率的な文字列内の各文字の上に自分自身を反復よりあるべき

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

、およびこの使用にforループ

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

を行うにはまた、単に正規表現と照合します正規表現の訓練を受けた目(少なくとも私の明らかに偏った意見)は、読むのが簡単です。

+0

+1ベストアンサーIMO。乾杯。 – Craig

関連する問題