2

我有一个字符数组,例如:

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 未定义”

请帮帮我。提前致谢。

4

5 回答 5

3

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

于 2012-12-14T14:42:04.333 回答
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"

或者,如果您也想允许拉丁字符:

[^0-9A-Za-z]

^ 这也不包括空格字符。

于 2012-12-14T14:42:52.510 回答
1

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

于 2012-12-14T14:44:30.110 回答
1

在我看来,你应该把你的字符列表变成一个正则表达式:

var badchars = /[<>$@&+()[\]{},` ]/;
if (badchars.test(id_val)) {
  // contains invalid characters
}
于 2012-12-14T14:48:09.040 回答
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
于 2012-12-14T15:16:21.650 回答