首页 > 解决方案 > Java - 如何验证不允许的字符?

问题描述

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

例如,这是一个完全正确的字符串: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();
}

标签: javaregex

解决方案


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

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

^[0-9;!-]+$


推荐阅读