2012-12-12 257 views
31

我知道這個問題在Stack更常提到,但我似乎無法從已發佈的問題中獲得直接的答案。jQuery:檢查字符串中是否存在特殊字符

我需要檢查所有特殊字符(除了 - )是否在字符串中,如果是的話,然後給用戶一個警報。

我到目前爲止是這樣的:

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.'); 
} 

但是這似乎並沒有工作...誰能幫助我在這個問題上?

在此先感謝!

圭多

+2

您需要在此處使用正則表達式而不是bazillion獨立條件。而你**肯定**必須說明它究竟「看起來不起作用」。 – Jon

+0

看到這可能是幫助你http://stackoverflow.com/questions/10505772/checking-for-any-occurrence-of-special-characters-with-jquery – Hkachhia

回答

82

如果你真的要檢查所有的特殊字符,它更容易使用正則表達式:

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

以上將只允許完全由該範圍a-zA-Z0-9字符的字符串,加上連字符一個空格字符。包含任何其他字符的字符串將導致alert

+0

這完美的作品。更短,更快,謝謝! –

+0

添加了一個簡短的解釋。缺點是它不會允許像'é'和'ñ'這樣的國際字符,但是如果你不需要允許它們,我相信這是要走的路。 – bfavaretto

+0

它的作品,即使與國際字符;)再次感謝! –

2

正在檢查的字符串是否包含所有非法字符。將|| s更改爲&& s。

20
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.'); 
} 
4

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

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

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

在這個例子中的正則表達式是數字,文字字符,下劃線(\ W)和空白(\ S)。脫字符(^)表示我們要查找不在我們的正則表達式中的所有內容,因此請查找不是單詞字符,下劃線,數字和空格的內容。

+4

這對國際字符(中文,阿拉伯文等)不起作用。我不會使用它。 –

+0

'== true'?不會'if(regex.test(str)){[...]}'足夠嗎? – scniro

+0

當然它會@scniro。爲了清楚起見,我只是把整個方程式。 –

相關問題