使用正则表达式查找某些特殊字符



我想知道输入字段是否包含某些特殊字符,如<(@#$%^&*>)如果用户输入有这些字符中的任何一个,它应该返回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();
}

最新更新