正则表达式,用于检查允许的字符在Java中不起作用

Nic*_*tti 6 java regex

我有以下方法来检查允许的字符:

private boolean checkIfAllCharsAreValid(String test) {
    boolean valid = false;
    if (test.matches("^[a-zA-Z0-9,.;:-_'\\s]+$")) {
        valid = true;
    }
    return valid;
}
Run Code Online (Sandbox Code Playgroud)

但如果test中包含该字符-,则匹配返回false.我必须逃脱-吗?

aio*_*obe 10

里面[... ]-符号进行特殊处理.(你在表达的开头用你自己的这个特殊目的a-z.)

你需要逃避-角色

[a-zA-Z0-9,.;:\-_'\s]
              ^
Run Code Online (Sandbox Code Playgroud)

或者把它放在[...]表达式中的最后(或第一个)

[a-zA-Z0-9,.;:_'\s-]
                   ^
Run Code Online (Sandbox Code Playgroud)

进一步说明:

  • 从技术上讲,所有字符在空字符串中都是有效的,所以我会在表达式中更改+*.

  • String.matches检查满弦,所以^$是多余的.

  • 你的整个方法可以被视为

    return test.matches("[a-zA-Z0-9,.;:_'\\s-]*");
    
    Run Code Online (Sandbox Code Playgroud)