我慷慨地使用了this question中接受的答案 - 正如这样实施时,正则表达式似乎正确地检查了非法字符:
public static boolean checkInvalidCharacter (String alphaNum)
{
if (alphaNum == null) return false;
try {
boolean isRegex = false;
RE r = new RE("^.*?(?=[\\^#%&$\\*:<>\\?/\\{\\|\\}]).*$");
isRegex = r.match(alphaNum);
System.out.println("isRegex: "+isRegex);
System.out.println("Space");
return r.match(alphaNum);
} catch (RESyntaxException e) {
return false;
}
}
但是,我们需要接受这些字符的子集(:?/ *&amp; $),当我尝试删除&#34;:&#34;为了查看它是否可行,我收到错误&#34;语法错误:缺少操作数以关闭&#34;。
我假设[]括号中包含的字符集是要检查的字符集 - 这是一个错误的假设吗?更重要的是,如何从此RegEx中删除有效的字符列表,以便将其与我的字符串进行比较?
答案 0 :(得分:2)
整个方法过于复杂。
你试过了吗?
public static boolean checkInvalidCharacter (String alphaNum) {
return alphaNum != null && alphaNum.matches(".*[\\^#%<>\\{\\|\\}].*");
}
或更好:
public static final String INVALID_CHARACTERS = "^#%<>{}|";
private static final Pattern INVALID_PATTERN = Pattern.compile("["+Pattern.escape(INVALID_CHARACTERS)+"]");
public static boolean containsInvalidCharacters(String input) {
return input != null && INVALID_PATTERN.matcher(input).find();
}
答案 1 :(得分:1)