我有以下方法来检查允许的字符:
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]+$"))
^