Java正则表达式检查某些字符是否与模式

时间:2016-02-16 09:23:34

标签: java regex

我需要你的正则表达式的帮助。 这是我的要求,检查字符串是否以0937,937或63937开头。接下来检查字符串是否仅包含数字并检查0937 = 11,937 = 10,63937 = 12的字符长度。

到目前为止,这是我尝试过的:

class MyRegex {

static Pattern p1 = Pattern.compile("^0937[0-9]{11}+$");
static Pattern p2 = Pattern.compile("^937[0-9]+{10}$");
static Pattern p3 = Pattern.compile("^63937[0-9]{12}$");

 public static void main(String []args){

    String phone = "09375126435"; //"639375126439"; // "9375126435";

    System.out.println(validateABSMobileNumber(phone));
 }

 public static boolean validateABSMobileNumber(String phone){
    return p1.matcher(phone).matches() || p2.matcher(phone).matches() || p3.matcher(phone).matches() ;
}

}

示例测试用例:

09375126435 = true 0937512643 = false 639375126439 =真 63937512643 =假 9375126439 =真 937512643 = false

但它没有正确运行。任何想法如何解决这一问题?感谢。

2 个答案:

答案 0 :(得分:1)

您的模式错误地计算了字符数。使用此:

static Pattern p1 = Pattern.compile("^0937[0-9]{7}$");
static Pattern p2 = Pattern.compile("^937[0-9]{7}$");
static Pattern p3 = Pattern.compile("^63937[0-9]{7}$");

答案 1 :(得分:0)

我认为你只能使用一种模式,如下所示:

static Pattern p = Pattern.compile("^((0937)|(937)|(63937))[0-9]{7}$");

这种模式包括你的三个正确长度的案例。因此,如果您可以使用维护正则表达式,我建议您使用属性文件。

我希望这些信息可以帮到你。

祝你好运。