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



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

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

但如果测试中有字符CCD_ 1,则匹配返回false。我必须逃离-吗?

[内部。。。]-符号进行了特殊处理。(在你有a-z的表达开始时,你自己就用它来达到这个特殊的目的。(

您需要逃离-字符

[a-zA-Z0-9,.;:-_'s]
              ^

或者像一样把它放在[...]表达式的最后(或第一(

[a-zA-Z0-9,.;:_'s-]
                   ^

一些进一步的注意事项:

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

  • String.matches检查完整字符串,因此^$是冗余的。

  • 你的整个方法可以写成

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

您可以将-放在字符组的开头,这样它就不会被解释为字符范围。

两边环绕的字符类中的-是表示范围的正则表达式元字符。

要在char类中列出文字-,请转义char类中的-

if (test.matches("^[a-zA-Z0-9,.;:\-_'\s]+$")) 
                                 ^^^ 

或者将-放在char类的末尾:

if (test.matches("^[a-zA-Z0-9,.;:_'\s-]+$")) 
                                      ^

或者将-放在char类的开头:

if (test.matches("^[-a-zA-Z0-9,.;:_'\s]+$")) 
                    ^

最新更新