正则表达式有什么问题?

时间:2013-04-27 11:28:58

标签: android regex matcher

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;
}

1 个答案:

答案 0 :(得分: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输入失败的评论,您还没有向我们展示其他错误。以下代码打印出falsefalsetruetrue就好了:

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"));
    }
}