Java - 正则表达式验证值

时间:2013-11-08 11:11:20

标签: java regex

我试图概括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 ..

我在这里做的错误是什么...... ?? ..

感谢您的投入并花费您宝贵的时间:)

2 个答案:

答案 0 :(得分:3)

我相信这个lookahead-based正则表达式适合你:

String pattern = "^(?=.*?[A-Za-z])(?=.*?[0-9])[a-zA-Z0-9]+$";

这可以确保:

  1. 输入
  2. 中至少有一个字母字符
  3. 输入中至少有一位数字
  4. 输入仅包含字母数字

答案 1 :(得分:2)

这是正确的结果,因为45645确实是一个字母数字值。

如果你想确保数值是数字和字母的组合,那么你需要一个不同的表达式:

String pattern = "^(?!^[0-9]+$)(?!^[a-zA-Z]+$)[a-zA-Z0-9]+$";
  • (?!^[0-9]+$):这可确保字符串不仅仅是数字组合。
  • (?!^[a-zA-Z]+$):这确保字符串不仅仅是字母组合。
  • [a-zA-Z0-9]*:这匹配字母和数字的组合。