我有一系列字符,如:
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未定义”
请帮帮我。 提前谢谢。
答案 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