Java - 如何验证不允许的字符?

Wit*_*uth 0 java regex

如果String值包含任何不是数字[0-9],连字符(-),分号(;)或感叹号的不同字符,我想抛出异常(!).

例如,这是一个完全正确的字符串:1; 3; 5-9;!12-14

但这个不是:1; 3abc; 5~9;?12*41

我正在尝试使用下面的代码,但它总是失败:

String values = "1;3;5-9;!12-14"
Pattern pattern = Pattern.compile("[\\d*]|[\\;]|[\\-]|[\\!]");
if (!pattern.matcher(values).matches()) {
    throw new Exception();
}
Run Code Online (Sandbox Code Playgroud)

The*_*ird 5

你的正则表达式[\\d*]|[\\;]|[\\-]|[\\!]使用4次字符类,它将匹配单个字符类中的字符.

您可以将它们全部放在一个字符类中,断言字符串的开头^和结尾$并重复一次或多次:

^[0-9;!-]+$