将数组元素与javascript中的特定字符串进行比较

时间:2012-12-14 14:38:34

标签: javascript compare

我有一系列字符,如:

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

并有一个字符串:

var id_val = $("#id_number").val(); //text field contains "mu 1$2@345"

所以我想限制 invalid_chars 输入。

为此,我有以下代码:

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

但它显示错误。“ReferenceError:in_array未定义”

请帮帮我。 提前谢谢。

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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 1$2@345"
id_val = id_val.replace( /[^0-9]/g, '' );
console.log( id_val ); //text now field contains "12345"

或者如果你想要我们也允许latin char's:

[^0-9A-Za-z]

^这也不包括空格字符。

答案 2 :(得分:1)

看起来你已经在使用jQuery,它有一个$.inArray()实用程序方法。

答案 3 :(得分:1)

在我看来,您应该将您的字符列表转换为正则表达式:

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

答案 4 :(得分:0)

您可以在数组上使用indexOf,但旧版本的MSIE的jScript引擎本身不支持此方法。所以要么为这些浏览器增加Array.prototype(显然不是没有风险),要么只是使用你要测试的字符串:

var nonoChars = '<>$@&+()[]{},`';
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(/[<>$@&+()\[\]{},`]/))
{
    alert('Invalid input');
    return false;
}
//input ok