2015-08-31 59 views
6

我想檢查一個字符串是否包含像@ @#$%^ & *。,<>/\'「;:?這樣的特殊字符,如果字符串至少包含其中的一個,則返回true 。字符檢查字符串中的特殊字符

我試着用下面的正則表達式,腳本:

var format = /^[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/; 

if(string.match(format)){ 
    return true; 
}else{ 
    return false; 
} 

如果字符串只包含特殊字符,那麼它返回true,但如果字符串包含別的東西像字母數字字符(例1。 example2)它返回false。

+1

所以你想讓我們爲你寫一個正則表達式嗎? – csmckelvey

+0

刪除錨點和量詞。爲了更簡潔,你可以使用像這樣的三元運算符:'return str.match(format)? true:false;' –

+0

@Takendarkk,這就是它的樣子?不,我想要一個關於我做錯了什麼的建議 –

回答

5

我建議使用正則表達式.test()功能檢查模式匹配,你需要改變的唯一事情是去除線錨的開始/結束(和*量詞也是多餘的)在正則表達式:

var format = /[ [email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/; 
 
//   ^        ^ 
 
document.write(format.test("[email protected](some%text)") + "<br/>"); 
 
document.write(format.test("My string with spaces") + "<br/>"); 
 
document.write(format.test("MyStringContainingNoSpecialChars"));

錨(如^串/行的開始,$ end od string/line和\b字邊界)可以限制字符串中特定位置的匹配。當使用^時,正則表達式引擎檢查下一個子模式是否顯示在字符串的開頭(如果在正則表達式中聲明瞭/m修飾符,則爲行)。與$相同:前面的子模式應該在字符串末尾匹配。

在你的情況下,你想檢查字符串中任何位置的集合中是否存在特殊字符。即使它只有一個,你想返回false。因此,你應該刪除錨點和量詞*。量詞將甚至匹配一個空字符串,因此我們必須將其刪除以便實際檢查是否存在至少一個特殊字符(實際上,沒有任何量詞我們檢查恰好是一次出現,就像我們正在使用{1}限制量詞)。

+0

謝謝,它的工作......雖然不清楚爲什麼...你能做一個簡短的解釋嗎? –

+1

當然,只需要給我3分鐘....完成。 –

+0

,如果我想尋找空的空間嗎?我應該改變什麼? –

1

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

 
var str = "YourText"; 
 
if(checkForSpecialChar(str)){ 
 
    alert("Not Valid"); 
 
} else { 
 
    alert("Valid"); 
 
}

4

您的正則表達式使用^$,因此它會嘗試匹配整個字符串。如果你只想要一個布爾值作爲結果,使用test而不是match

var format = /[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+/; 

if(format.test(string)){ 
    return true; 
} else { 
    return false; 
} 
1

從正則表達式中取出字符^(串的開始)和$(串的終點)。

var format = /[[email protected]#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/; 
2

反而會更容易否定匹配字母數字嗎?

return string.match(/^[^a-zA-Z0-9]+$/) ? true : false; 
+0

謝謝「......返回true如果字符串包含ATLEAST一個[特殊字符] ...」 – Teemu

+0

事實上,一個壞的問題與矛盾的本身=( – Teemu

+0

固定我的答案,應該現在更有意義。 –

-1

你可以試試這個:

regex = [\W_]

它一定會幫助你。

相關問題