2013-04-02 199 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