正则表达式,用于检查允许的字符在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]+$")) ^
您可以将-
放在字符组的开头,以便它不会被解释为字符范围。