【问题标题】:Regex for mobile number with optional country code带有可选国家代码的手机号码的正则表达式
【发布时间】:2016-04-20 07:10:26
【问题描述】:

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

非常感谢您的任何帮助和建议。

【问题讨论】:

  • 你试过什么?在寻求帮助之前,您应该先尝试一下,然后解决您在试验中遇到的问题
  • @Darken 感谢您的及时回复,直到现在我尝试了 ^(249)([1]{1})([0-9]{8})$ 以 249 开头然后 (1 ) 然后是 8 位数字和 ^(1)([0-9]{8})$ 当数字以 1 开头后跟 8 位数字时,但我需要一个正则表达式来处理这两个条件

标签: java regex


【解决方案1】:

这个正则表达式可以工作

^(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

【讨论】:

  • 非常感谢您的及时回答,它有效,或者我还创建了其他 ^(^(249)?)?[1]{1}\d{8}$ 在regextester.com 测试但您的答案较短,请帮助一个正则表达式否定上述条件
  • 请建议上述正则表达式的否定,意思是接受除 ^(249)?1\d{8}$ 之外的任何内容
  • 我会接受你的回答,但它只解决了一部分,所以也请建议第二部分
  • 实际上我在内部应用程序中使用它生成一个xml,其代码是用java编写的。但是在应用程序中,如果 ^(249)?1\d{8}$ 则转发到下一个操作,如果数字不高于则给用户错误输入,即我没有直接与 java 代码交互。
  • 非常感谢您提供宝贵的时间,上面的链接接近我的答案,除了两种情况,即 (1)- 当数字开始 249 后跟 1 然后是更少或更多的数字,然后是 12 (2 )- 如果数字以 1 开头,然后是更少或更多的数字,然后是 9
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2013-11-18
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
相关资源
最近更新 更多