如果String包含“非法字符”,我想编写一个简单的验证器来抛出异常,具体来说:
〜,@,+,%和|
我正在寻找最干净的方法,并且希望有一种方法来定义一个可能看起来像这样的“黑名单”正则表达式:
String blacklist = "~@+%|";
String toValidate = getInputFromUser();
if(toValidate.matches(blacklist))
throw new RuntimeException("Illegal characters found!");
但是我知道正则表达式是不正确的。我是朝着正确的方向前进还是离开基地(即有更简单的解决方案)?提前谢谢!
答案 0 :(得分:5)
正则表达式应为^.*[~@+%|].*$
或者,您可以[~@+%|]
使用find
方法代替matches
答案 1 :(得分:1)
如果您正在寻找一种清晰简洁的方法来执行此操作,我将不会使用regexp,因为Java中的API往往会变得混乱。 Apache commons-lang
有StringUtils.containsAny("text","blacklisted");
。它通常是一个很好的库,无论如何都要包含它,因为它补充了Java,而不仅仅是几个字符串实用程序。