我想知道输入字段是否包含某些特殊字符,如<(@#$%^&*>)如果用户输入有这些字符中的任何一个,它应该返回true。
示例:Robert#,S%am
public static boolean isInvalidCharacters(String input) throws Exception {
try {
Pattern pattern = Pattern.compile("[^<(@#$%^&*>]");
Matcher matcher = pattern.matcher(input);
boolean isFound =matcher.find();
if (!isFound) {
return true;
} else {
return false;
}
} catch (Exception err) {
throw err;
}
您的表达式在本质上是正确的,但需要完成它,以便它标记的不是一个字符,而是一个字符串。
试试这个正则表达式
^[^<(@#$%^&*>]+$
演示
Java示例public static void main(String[] args) {
String input = "abcdnabcd@";
Pattern pattern = Pattern.compile("^[^<(@#$%^&*>]+$");
Matcher matcher = pattern.matcher(input);
boolean isFound = matcher.find();
System.out.println(!isFound);
}
也有一个简单的解决方案没有regex
boolean isFound = "<(@#$%^&*>"
.chars()
.mapToObj(x -> String.valueOf((char) x))
.anyMatch(input::contains);
在你的代码问题是领先的^
字符。您可以进一步简化它,如
public static boolean isInvalidCharacters(String input) throws Exception {
try {
Pattern pattern = Pattern.compile("[<()@#$%^&*>]");
Matcher matcher = pattern.matcher(input);
return matcher.find();
} catch (Exception err) {
throw err;
}
}
注意:当isFound = false
.
true
时,逻辑无效。编辑
您可以进一步简化,因为try-catch
块不需要。
public static boolean isInvalidCharacters(String input) {
Pattern pattern = Pattern.compile("[<()@#$%^&*>]");
Matcher matcher = pattern.matcher(input);
return matcher.find();
}