我有一个拥有数百万电话号码的数据库,可以免费格式化.即,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
你可以编写自己的(美国电话#格式):
Google最近发布了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)
我是根据自己的需要制作的,它接受了数字:
它们可能有:+或者一个或两个零.然后,可能会跟着一个-.
接受:
+45600456+123401234以上所有可能会或可能不会a -
拒绝:
0456
00456或+456或04444一个8-20位的简单数字.
接受:
00456-12345678+457-12345678+45712345678004571234567899999999感觉自由,所以你可以包括支持.或'('分隔符.只要确保你逃脱它们,例如(使用\(.