38

我知道这个问题在 Stack 上被问得更频繁,但我似乎无法从已经发布的问题中得到直接的答案。

我需要检查所有特殊字符(除了 - )是否都在一个字符串中,如果是,那么给用户一个警报。

我到目前为止是这样的:

if($('#Search').val().indexOf('@') == -1 || $('#Search').val().indexOf('#') == -1 || $('#Search').val().indexOf('$') == -1 || $('#Search').val().indexOf('%') == -1 || $('#Search').val().indexOf('^') == -1 || $('#Search').val().indexOf('&') == -1 || $('#Search').val().indexOf('*') == -1 || $('#Search').val().indexOf('(') == -1 || $('#Search').val().indexOf(')') == -1 || $('#Search').val().indexOf('_') == -1 || $('#Search').val().indexOf('\'') == -1 || $('#Search').val().indexOf('\"') == -1 || $('#Search').val().indexOf('\\') == -1 || $('#Search').val().indexOf('|') == -1 || $('#Search').val().indexOf('?') == -1 || $('#Search').val().indexOf('/') == -1 || $('#Search').val().indexOf(':') == -1 || $('#Search').val().indexOf(';') == -1 || $('#Search').val().indexOf('!') == -1 || $('#Search').val().indexOf('~') == -1 || $('#Search').val().indexOf('`') == -1 || $('#Search').val().indexOf(',') == -1 || $('#Search').val().indexOf('.') == -1 || $('#Search').val().indexOf('<') == -1 || $('#Search').val().indexOf('>') == -1 || $('#Search').val().indexOf('{') == -1 || $('#Search').val().indexOf('}') == -1 || $('#Search').val().indexOf('[') == -1 || $('#Search').val().indexOf(']') == -1 || $('#Search').val().indexOf('+') == -1 || $('#Search').val().indexOf('=') == -1)
{
   // Code that needs to execute when none of the above is in the string
}
else
{
  alert('Your search string contains illegal characters.');
}

但这似乎不起作用......有人可以在这件事上帮助我吗?

提前致谢!

圭多

4

4 回答 4

97

如果您真的想检查所有这些特殊字符,使用正则表达式会更容易:

var str = $('#Search').val();
if(/^[a-zA-Z0-9- ]*$/.test(str) == false) {
    alert('Your search string contains illegal characters.');
}

a-z以上将只允许完全由范围内的字符组成的字符串,,,,A-Z加上0-9连字符和空格字符。包含任何其他字符的字符串将导致alert.

于 2012-12-12T12:50:50.887 回答
23
var specialChars = "<>@!#$%^&*()_+[]{}?:;|'\"\\,./~`-="
var check = function(string){
    for(i = 0; i < specialChars.length;i++){
        if(string.indexOf(specialChars[i]) > -1){
            return true
        }
    }
    return false;
}

if(check($('#Search').val()) == false){
    // Code that needs to execute when none of the above is in the string
}else{
    alert('Your search string contains illegal characters.');
}
于 2012-12-12T13:06:26.940 回答
6

您也可以使用白名单方法 -

var str = $('#Search').val();
var regex = /[^\w\s]/gi;

if(regex.test(str) == true) {
    alert('Your search string contains illegal characters.');
}

此示例中的正则表达式是数字、单词字符、下划线 (\w) 和空格 (\s)。插入符号 (^) 表示我们要查找不在正则表达式中的所有内容,因此请查找不是单词字符、下划线、数字和空格的内容。

于 2012-12-12T13:24:54.790 回答
2

您正在检查字符串是否包含所有非法字符。||将s更改为&&s。

于 2012-12-12T12:49:20.377 回答