5

我是java正则表达式的新手。我编写了以下代码来验证非数字号码。如果我们输入任何非数字数字,它应该返回 false。对我来说,下面的代码总是返回 false。这里有什么问题?

包正则表达式;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberValidator {

    private static final String NUMBER_PATTERN = "\\d";
    Pattern pattern;

    public NumberValidator() {
        pattern = Pattern.compile(NUMBER_PATTERN);
    }

    public boolean validate(String line){
        Matcher matcher = pattern.matcher(line);
        return matcher.matches();
    }

    public static void main(String[] args) {

        NumberValidator validator = new NumberValidator();

        boolean validate = validator.validate("123");

        System.out.println("validate:: "+validate);
    }

}
4

2 回答 2

10

来自 Java 文档:

matches 方法尝试将整个输入序列与模式进行匹配。

您的正则表达式匹配单个数字,而不是数字。添加+after\\d以匹配一个或多个数字:

private static final String NUMBER_PATTERN = "\\d+";

作为旁注,您可以将模式的初始化和声明结合起来,使构造函数变得不必要:

Pattern pattern = Pattern.compile(NUMBER_PATTERN);
于 2012-07-24T16:28:59.360 回答
2

matches“当且仅当整个区域序列与此匹配器的模式匹配时才返回 true。”

该字符串是 3 位数字,与 pattern 不匹配\d,意思是“一个数字”。

相反,您需要 pattern \d+,意思是“一个或多个数字”。这在字符串中表示为"\\d+"

于 2012-07-24T16:31:05.893 回答