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

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

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

但如果test有字符-在其中匹配返回false。 我必须逃避-

[]里面-符号是专门处理的。 (你在表达式的开头用你的az来自己使用它。)

你需要逃避-角色

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

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

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

进一步说明:

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

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

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

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

A -在两侧包围的字符类中是用于表示范围的正则表达式元字符。

列出一个文字-在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]+$")) ^ 

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