带有可选国家/地区代码的手机号码的正则表达式

时间:2016-04-20 07:10:26

标签: java regex

实际上我在内部应用程序中使用它生成一个xml,其代码是用java编写的。但是在应用程序中如果^(249)?1 \ d {8} $然后它转发到下一个操作,如果数字不在上面然后给用户错误的输入,即我没有直接与java代码交互我想要一个正则表达式用于移动号码验证。正则表达式模式应该是这样的,它必须接受249国家代码(仅一次),然后是'1'(仅一次),然后是8位数。国家/地区代码应该是可选的。如果国家/地区代码不存在,则只能接受以1开头的9位数字。

同样,否定上述条件的正则表达式是指任何不以249开头并且长度为12的移动号码,如果长度为9且不以1开头。 正则表达式应该接受像

这样的数字
249189372837 start with 249 followed by 1 and must of 12 digit length
249123476358 
183526352  if start with 1 and must of 9 digit length (249 optional) 

不应接受

2431983645238   country code not 249
24924356383799  more then 12 digit including country code
249212236472 not 1 after 249
1232345678   more length then 9
12345323     less length then 9
456278399    if 249 is not there then mut start with 1 with length of 9

所以我需要正则表达式来接受上述条件和一个正则表达式,它接受除了接受条件之外的任何数字。

我从^(249)([1]{1})([0-9]{8})$开始尝试249然后(1)然后是8位和^(1)([0-9]{8})$,当数字以1开头后跟8位数时,我需要一个正则表达式来处理这两个条件

实际上我在内部应用程序中使用它生成一个xml,其代码是用java编写的。但是在应用程序中如果^(249)?1 \ d {8} $(由@ rock321987回答)然后它转发到下一个操作,如果数字不高于正则表达式然后给用户错误的输入,即我不直接与java代码交互< / p>

提前感谢任何帮助和建议。

1 个答案:

答案 0 :(得分:2)

这个正则表达式将起作用

^(249)?1\d{8}$

<强> Regex Demo

第二部分

(?=^1)(^\d{1,8}$|^\d{10,}$)|(?=^2491)(^\d{1,11}$|^\d{13,}$)
(?!^(2491|1))^(\d{9}|\d{12})$

Java代码

Scanner x = new Scanner(System.in);
String pattern = "^(249)?1\\d{8}$";
Pattern r = Pattern.compile(pattern);
while (true) {
    String line = x.nextLine();
    Matcher m = r.matcher(line);
    if (m.find()) {
         System.out.println("Found -> " + m.group());
    } else {
         System.out.println("Not Found");
    }
}

<强> Ideone Demo