我似乎在运行时被错误地使用了表达式。引起心脏烧伤的线是
String expression = "$+!*'(),{}|\^[]`<>#%";/?:&=";
这是我的代码
public static boolean hasBlackListCharacters(CharSequence strString)
{
boolean hasBlackListedChar = false;
String expression = "$+!*'(),{}|\^[]`<>#%";/?:&=";
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(strString);
if (matcher.matches()) {
hasBlackListedChar = true;
}
return hasBlackListedChar;
}
输入不应与以下任何字符匹配。
$+!*'(),{}|\^[]`<>#%";/?:&=
输入字符串
<img src = "http://evil.com">
必须搜索CharSequence
是否存在任何这些字符..并相应地返回或返回。
答案 0 :(得分:0)
private static Pattern pattern = Pattern.compile("[$+!*'(),{}|\\\\^\\[\\]`<>#%\";/?:&=]");
public static boolean hasBlackListCharacters(String strString) {
return pattern.matcher(strString).find();
}
答案 1 :(得分:0)
String expression = "$+!*'(),\\{\\}|\\\\^\\[\\]`<>#%\";/?:&=";
你需要两次转义反斜杠,因为它在正则表达式中使它成为正则表达式转义而不是java excape \成为\\
逃避花括号以避免在索引异常附近非法重复
转过方括号。
您还可以查看, https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringEscapeUtils.html#escapeJava(java.lang.String) 这个类具有强大的转义功能。