2013-04-02 243 views
1

我試着寫正則表達式來檢查文本段落特殊字符(包括「腳本」和「JavaScript的」關鍵字)使用:正則表達式的特殊字符

"(script)|(javascript)|([/'()&<>^~`|\"])" 

但是,這並不工作,如果我用它混合字母。比方說,如果我輸入<,它會檢測到,但如果我輸入<s ir不會檢測到。

+0

無關與Spring,去除春天標籤。 – Adrian

+1

你是正則表達式查找由恰好一個特殊字符組成的字符串(或匹配前兩個模式)。 – jahroy

回答

2

試試這個:

".*(script|javascript|[/'()&<>^~`|\"]).*" 

我在正則表達式之前和之後添加了.*

這意味着:

  • 零個或多個隨後的任何特殊字符(或圖案)
  • 後跟零個或多個任意字符的任何字符

這應該讓你的正則表達式匹配這樣的模式:

aaaa< 
aaaa<a 
<aaaaa 
< 
xscript 
scriptx 
xxscriptxx 

這裏是另一種方式來做到這一點:

static final Pattern INVALID_CHARS = Pattern.compile("[/'()&<>^~`|\"]"); 

boolean isInvalid(String s) { 
    if (s.indexOf("javascript") != -1) { 
     return true; 
    } 
    if (s.indexOf("script") != -1) { 
     return true; 
    } 
    if (INVALID_CHARS.matcher(s).find()) { 
     return true; 
    } 
    return false; 
} 
+1

偉大的信息jahroy!非常感謝! – McQueen

0

它不會檢測'< s',因爲它不適用於。

所有要做的事情都是匹配「javascript」的一個實例,「script」的一個實例或者其中一個特殊字符。

如果您希望它檢測'< s;您需要使用*或+ ...像

((script)|(javascript)|([/'()&<>^~`|\"]))+ 

雖然這不會匹配 '< S',它將匹配 '<腳本'

+0

截至目前它只適用於單個字符。如果輸入任何文字,讓我們說「這是第一個文本」。這個(|)沒有被檢測到。 同樣的方式,如果我輸入「腳本」,它會被檢測到,但如果我輸入「這是一個腳本」它沒有得到檢測 – McQueen