Java电话号码格式API

Cha*_*ert 28 java

我有一个拥有数百万电话号码的数据库,可以免费格式化.即,UI不强制执行任何约束,并且用户正在输入他们想要的任何内容.

我正在寻找的是一个Java API,可以尽最大努力将这些转换为一致的格式.理想情况下,API将采用自由文本值和国家/地区代码并生成有效的国际电话号码或抛出异常.

例如,系统中的电话号码可能类似于以下任何一种:

(555) 478-1123
555-478-1123    
555.478.1123
5554781123
Run Code Online (Sandbox Code Playgroud)

鉴于美国的国家,API将为所有这些产生价值"+1(555)478-1123".确切的格式无关紧要,只要它是一致的.

系统中还有数字没有区号,例如"478-1123".在这种情况下,我会期待NoAreaCodeException或类似的东西.

还可能存在诸如"abc"之类的数据,这些数据也应该抛出异常.

当然,我发布的例子有无数种变化,以及国际电话号码的巨大复杂性,它们具有相当复杂的验证规则.这就是为什么我不会考虑自己动手.

有没有人见过这样的API?

Bil*_*ard 41

你可以编写自己的(美国电话#格式):

  • 从字符串中删除任何非数字字符
  • 检查剩余的字符串是否长十个字符
  • 将括号括在前三个字符周围,在第六个和第七个字符之间加一个破折号.
  • 在字符串前加上"+1"


更新:

Google最近发布了libphonenumber,用于解析,格式化,存储和验证国际电话号码.

  • `libphonenumber`要求您已经知道国家代码能够做任何有用的事情. (4认同)
  • 这基本上就是我最终做的事情.您可以从我的博客下载美国和英国电话号码的示例代码:http://bitkickers.blogspot.com/2009/02/java-phone-number-format-api.html (2认同)

小智 23

您可以尝试使用此Java电话号码格式库https://github.com/googlei18n/libphonenumber

它有数百个国家和格式的数据.


Pas*_*lis 10

简单的正则表达式解析器

/**
 * @param pPhoneNumber
 * @return true if the phone number is correct
 */
private boolean isPhoneNumberCorrect(String pPhoneNumber) {

    Pattern pattern = Pattern
            .compile("((\\+[1-9]{3,4}|0[1-9]{4}|00[1-9]{3})\\-?)?\\d{8,20}");
    Matcher matcher = pattern.matcher(pPhoneNumber);

    if (matcher.matches()) return true;


    return false;
}
Run Code Online (Sandbox Code Playgroud)

格式

我是根据自己的需要制作的,它接受了数字:

  1. COUNTRYCODE-数

国家代码:

它们可能有:+或者一个或两个零.然后,可能会跟着一个-.

接受:

  • +456
  • 00456
  • +1234
  • 01234

以上所有可能会或可能不会a -

拒绝:

  • 0456
    • 它应该是:
      • 00456+45604444

一个8-20位的简单数字.

接受:

  • 00456-12345678
  • +457-12345678
  • +45712345678
  • 0045712345678
  • 99999999

扩展它?

感觉自由,所以你可以包括支持.或'('分隔符.只要确保你逃脱它们,例如(使用\(.