-4
private boolean name_valid (String a){
    Pattern regex1=Pattern.compile("^[a-zA-Z]{3,90}$");
    Matcher matcher1 = regex1.matcher(a);
    boolean flag1= matcher1.matches();
    return flag1;
}
4

1 回答 1

2

您需要完全指定失败的输入。这应该匹配任何包含 3 到 90 个字母字符的字符串。

可能值得在其中放置一些调试代码(或使用您必须中断的任何调试器name_valid),以便您可以检查字符串,例如:

System.out.println ("[" + a + "]");

但值得一提的是,如果您只打算使用一次正则表达式,那么编译它是没有意义的。您可以在函数之外编译它并多次使用它,否则,使用起来会更简单:

private boolean name_valid (String a) {
    //System.out.println ("[" + a + "]"); // Debug code
    return a.matches ("^[a-zA-Z]{3,90}$");
}

根据您关于asdf输入失败的评论,您没有向我们展示其他错误。以下代码打印false, false, true,true就好了:

import java.util.regex.*;

class Test {
    public static boolean name_valid_1 (String a){
        Pattern regex1 = Pattern.compile ("^[a-zA-Z]{3,90}$");
        Matcher matcher1 = regex1.matcher (a);
        boolean flag1 = matcher1.matches();
        return flag1;
    }
    public static boolean name_valid_2 (String a){
        return a.matches ("^[a-zA-Z]{3,90}$");
    }
    public static void main(String args[]) {
        System.out.println (name_valid_1 ("as"));
        System.out.println (name_valid_1 ("1111"));
        System.out.println (name_valid_1 ("asdf"));
        System.out.println (name_valid_2 ("asdf"));
    }
}
于 2013-04-27T11:41:36.140 回答