2012-04-07 144 views
4

我有一個腳本,我試圖讓工作。基本上,我想要做的是防止某人在特定字符中輸入字段。indexOf()函數返回-1值

我具備的功能如下:

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

    { 
    alert ("problem") 
    } 

我遇到的問題是,該領域正在搜索的精確匹配到iChars變種,而不是匹配任何單個值。例如,如果我創建一個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

這很好,但有沒有辦法將警報數量限制爲一個?如果我放入!我會得到兩個警報,我可以壓制它嗎? – Umeed 2012-04-07 03:04:32

+1

@Umeed「break」應該將其限制爲一次提醒。 – alex 2012-04-07 03:05:24

+0

謝謝,我忘了休息! – Umeed 2012-04-07 03:10:11

3

問題是你正在尋找在用戶輸入整個iChars字符串的索引。你實際上想要做的是看看iChars中的任何字符是否在輸入字符串中。要做到這一點使用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

你也可以檢查一個正則表達式:

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

這條線路應該比自己遍歷每個字符的字符串,在一個小更高效,對正則表達式訓練的眼睛(或至少在我明顯偏見的意見)更容易閱讀。

+0

+1最佳答案IMO。乾杯。 – Craig 2012-04-07 03:07:38