2012-12-14 195 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