我试图概括Regex-java,如果我给出值和模式,那么方法应该返回true或false if the given value matches the given pattern - TRUE else FALSE
。
以下是我尝试使用简单字母数字
的方法import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches {
public static boolean isValidInput(String value, String pattern) {
boolean isValid = false;
Pattern walletInputPattern = Pattern.compile(pattern);
Matcher walletMatcher = walletInputPattern.matcher(value);
if (walletMatcher.matches()) {
isValid = true;
}
return isValid;
}
public static void main(String args[]) {
String pattern = "^[a-zA-Z0-9]*$";
String inputValue = "45645";
if (isValidInput(inputValue, pattern)) {
System.out.println("Alphanumeric");
} else {
System.out.println("OOPS");
}
}
}
但是我提供了错误的输入,但它仍然打印了TRUE ..
我在这里做的错误是什么...... ?? ..
感谢您的投入并花费您宝贵的时间:)
答案 0 :(得分:3)
我相信这个lookahead-based
正则表达式适合你:
String pattern = "^(?=.*?[A-Za-z])(?=.*?[0-9])[a-zA-Z0-9]+$";
这可以确保:
答案 1 :(得分:2)
这是正确的结果,因为45645
确实是一个字母数字值。
如果你想确保数值是数字和字母的组合,那么你需要一个不同的表达式:
String pattern = "^(?!^[0-9]+$)(?!^[a-zA-Z]+$)[a-zA-Z0-9]+$";
(?!^[0-9]+$)
:这可确保字符串不仅仅是数字组合。(?!^[a-zA-Z]+$)
:这确保字符串不仅仅是字母组合。[a-zA-Z0-9]*
:这匹配字母和数字的组合。