1

我正在尝试编写正则表达式来检查文本段落中的特殊字符(包括'script'和'javascript'关键字),使用:

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

但是,如果我将字母与它混合,这将不起作用。假设我输入<,它会检测到,但如果我输入<sir 不会检测到。

4

2 回答 2

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;
}
于 2013-04-02T20:32:34.423 回答
0

它不会检测到'<s',因为它不是设计的。

所要做的就是匹配“javascript”的一个实例、“script”的一个实例或这些特殊字符之一。

如果你想让它检测 '<s; 你需要使用 * 或 +... 之类的

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

虽然这不会匹配 '<s',但它会匹配 '<script'

于 2013-04-02T20:12:21.480 回答