2012-12-14 168 views
2

我有人物像數組:比較數組元素的字符特定字符串中的JavaScript

var invalid_chars = ['<', '>', '$', '@', '&', '+', '(', ')', '[', ']', '{', '}',' ','`']; 

,並有這樣的字符串:

var id_val = $("#id_number").val(); //text field contains "mu [email protected]" 

所以我想限制invalid_chars將在該字段中輸入。

對於我有以下代碼:

var id_val = $("#id_number").val(); 
var invalid_chars = ['<', '>', '$', '@', '&', '+', '(', ')', '[', ']', '{', '}',' ','`']; 
if (in_array(invalid_chars,id_val)) { 
    console.info("HI"); 
} 

但它爲我的錯誤 「的ReferenceError:in_array沒有定義」

請幫助我。 在此先感謝。

回答

3

in_array()是一種PHP方法。在JavaScript中使用indexOf()

1

你需要寫in_array功能,簡單的例子:

function in_array(arr, val) { 
    for(var i = 0; i < arr.length; i++) { 
     if(arr[ i ] == val) { 
      return true; 
     } 
    } 
} 

或使用正則表達式:

if(id_val.search(/[^0-9]/g) == -1) 

或使用正則表達式,你可以去除所有非數字字符:

var id_val = $("#id_number").val(); //text field contains "mu [email protected]" 
id_val = id_val.replace(/[^0-9]/g, ''); 
console.log(id_val); //text now field contains "12345" 

或者如果你想讓我拉丁字符的:

[^0-9A-Za-z]

^這不包括空格字符。

1

看起來你已經在使用jQuery,它有一個$.inArray()實用程序方法。

1

你應該把你的人物的名單爲正則表達式,在我看來:

var badchars = /[<>[email protected]&+()[\]{},` ]/; 
if (badchars.test(id_val)) { 
    // contains invalid characters 
} 
0

您可以使用數組indexOf,但舊版本的MSIE的JScript引擎的本身不支持這種方法。因此,無論增加的Array.prototype這些瀏覽器(並非沒有風險,很明顯),或簡單地用你要測試的字符的字符串:

var nonoChars = '<>[email protected]&+()[]{},`'; 
for(var i = 0; i< id_val.length; i++) 
{ 
    if (nonoChars.indexOf(id_val.charAt(i)) > -1) 
    { 
     alert('Char #' + (i + 1) + ' is not allowed!'); 
     return false; 
    } 
} 
//input ok 

但是,在這種情況下,一個正則表達式只是更有意義:

if (id_val.match(/[<>[email protected]&+()\[\]{},`]/)) 
{ 
    alert('Invalid input'); 
    return false; 
} 
//input ok