Javascript jQuery:检查字符串中是否存在特殊字符

Javascript jQuery:检查字符串中是否存在特殊字符,javascript,jquery,special-characters,Javascript,Jquery,Special Characters,我知道这个问题在Stack上经常被问到,但我似乎无法从已经发布的问题中得到一个直接的答案 我需要检查是否所有特殊字符(除了-)都在一个字符串中,如果是,则向用户发出警报 到目前为止,我得到的是: if($('#Search').val().indexOf('@') == -1 || $('#Search').val().indexOf('#') == -1 || $('#Search').val().indexOf('$') == -1 || $('#Search').val().indexOf

我知道这个问题在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.');
}
<代码>如果如果($(#;搜索搜索)进行的代码<<代码>如果(((($35搜索搜索)进行的代码>如果((((((35搜索)进行进行的搜索)进行进行的)以及以及((((35搜索)进行的搜索)进行进行进行进行进行的代码>如果(((35搜索)搜索)以及以及整个整个代码>无损无损无损无损((((((““')')'),)=====)如果如果(((((((((“)进行进行此次此次此次此次此次此次此次此次此次此次此次此次此次此次此次)搜索)搜索)进行的)的)的)的)如果如果如果如果如果如果)以及以及以及以及以及以及以及以及以及整个整个整个整个整个整个整个整个整个整个整个整个整个整个整个代码)以及以及以及以及现场现场现场现场现场现场现场现场现场现场现场现场现场)以及以及以及以及以及以及以及以及以及整个整个整个整个整个整个整个无损无损无损无损无损.......“&')=-1 | |$(“|搜索”).val().indexOf(“*”)=-1 | |$(“|搜索”).val().indexOf(“(”)=-1 | |$(“|搜索”)(3)搜索)val.索引OOf()...无损无损无损无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损检测().无损无损检测().无损检测().(“)===-1 1 1 1 1 1124;\124;124;;;;;;;;;;;;()()()()()()()()()()()()()()()..(.((“)))))===,,,,=============-1 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.[[[[[\124$(“#搜索”).val().indexOf(“?”)==-1(“#搜索”).val().indexOf(“/”)=-1(“#搜索”).val().indexOf(“:”)1.1 124;|现场现场现场现场现场((124;;;;;硬质硬质硬质硬质(((“;;;;)===-1.1 124???????????????124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,=====-1.1.1??????;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(“搜索”搜索搜索()()))))))))).val.................val.......val...........(.(.(.(.(.(.(.(现场现场现场现场现场现场现场现场现场搜索.搜索xof(‘.)==-1 | |$(‘|搜索’).val().indexOf(‘“)=-1 | |$(‘|搜索’).val().indexOf(‘‘’=-1 | |$(‘搜索’).val() { //当字符串中没有上述内容时需要执行的代码 } 其他的 { 警报('您的搜索字符串包含非法字符'); } 但这似乎不起作用…有人能在这件事上帮我吗

提前谢谢


Guido

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

如果确实要检查所有这些特殊字符,使用正则表达式更容易:

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
,加上连字符和空格字符组成。包含任何其他字符的字符串将导致
警报

var specialChars=“@!#$”^&*()_+[]{}?:;|'\"\\,./~`-="
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.');
}
变量检查=函数(字符串){ 对于(i=0;i-1){ 返回真值 } } 返回false; } if(检查($('#Search').val())==false){ //当字符串中没有上述内容时需要执行的代码 }否则{ 警报('您的搜索字符串包含非法字符'); }
您也可以使用白名单方法-

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

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

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

这里需要使用正则表达式,而不是大量单独的条件。你肯定要说它到底是如何“似乎不起作用的”。看,这可能有助于你添加一个简短的解释。缺点是它不允许像
é
ñ
这样的国际字符,但如果你不需要允许它们,我相信这是一种方式。它可以工作,即使是国际字符;)再次感谢!这对于国际字符(中文、阿拉伯语等)无效。我不会用它的。它不寻找像安东的例子那样的特殊字符。我们为什么不写
/[^a-zA-Z0-9-]*$/
而不是
/^[a-zA-Z0-9-]*$/
?@Stallman含义不同。在括号内,
^
对列表求反,而不是定义字符串的开头。这对国际字符(中文、阿拉伯语等)无效。我不会使用它。
==true
?如果(regex.test(str)){[…]}
就足够了,那么
就足够了吗?当然可以@scniro。为了清楚起见,我把整个方程都放进去了。