使用正则表达式验证美国电话号码

时间:2014-01-18 11:22:37

标签: java regex phone-number

在我的android项目中,我需要验证用户输入的手机号码。手机号码的格式可以是(456)123-1234。手机号码的第一个字符必须是4或5或6.I试过这个正则表达式。但它失败了。这是我试过的正则表达式。

"\\([4-6]{1}[0-9]{2}\\)[0-9]{3}\\-[0-9]{4}$";

任何人都可以帮助我!先谢谢!

我使用这个正则表达式解决了这个问题:

PHONE_REGEX ="\\([4-6]{1}[0-9]{2}\\) [0-9]{3}\\-[0-9]{4}$";

3 个答案:

答案 0 :(得分:1)

符合您格式的正则表达式:

(456)123-1234  (starting with only 4,5 or 6)

将是:

^\([4-6]{1}[0-9]{2}\)[0-9]{3}-[0-9]{4}$

示例:

http://regex101.com/r/pZ7aL4

如果要在右括号后允许可选空格,即:

(456)123-1234

您可以像这样稍微修改正则表达式:

^\([4-6]{1}[0-9]{2}\)\s?[0-9]{3}-[0-9]{4}$

答案 1 :(得分:0)

 String sPhoneNumber = "456-8889999";


  Pattern pattern = Pattern.compile("\\([4-6]{1}[0-9]{2}\\) [0-9]{3}\\-[0-9]{4}$");
  Matcher matcher = pattern.matcher(sPhoneNumber);

  if (matcher.matches()) {
      System.out.println("Phone Number Valid");
  }
  else
  {
      System.out.println("Phone Number must be in the form XXX-XXXXXXX");
  }

答案 2 :(得分:0)

您应该知道,北美地区的地区代码与北美编号计划中的美国格式一样,但不与美国电话运营商共享费率结构。例子包括波多黎各,多米尼加共和国,加拿大等。

如果您正在使用此正则表达式阻止拨打长途电话或从长途电话拨打电话,则需要特定的白名单或黑名单 - 如果您依赖正则表达式,则可能会有一些昂贵的意外。