使用Java模式检查否定列表字符的存在

时间:2016-09-04 03:12:29

标签: java regex pattern-matching user-input

我似乎在运行时被错误地使用了表达式。引起心脏烧伤的线是

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是否存在任何这些字符..并相应地返回或返回。

2 个答案:

答案 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) 这个类具有强大的转义功能。