我正在使用这个库:https://github.com/davideme/libphonenumber-for-PHP。以下是演示代码:
<?php
use com\google\i18n\phonenumbers\PhoneNumberUtil;
use com\google\i18n\phonenumbers\PhoneNumberFormat;
use com\google\i18n\phonenumbers\NumberParseException;
require 'PhoneNumberUtil.php';
$swissNumberStr = "1212-894-3000";
$phoneUtil = PhoneNumberUtil::getInstance();
try {
$swissNumberProto = $phoneUtil->parseAndKeepRawInput($swissNumberStr, "US");
echo $phoneUtil->format($swissNumberProto, PhoneNumberFormat::E164) . PHP_EOL;
echo $phoneUtil->format($swissNumberProto, PhoneNumberFormat::INTERNATIONAL) . PHP_EOL;
echo $phoneUtil->format($swissNumberProto, PhoneNumberFormat::NATIONAL) . PHP_EOL;
echo $phoneUtil->format($swissNumberProto, PhoneNumberFormat::E164) . PHP_EOL;
echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "US") . PHP_EOL;
} catch (NumberParseException $e) {
echo $e;
}
下面是我的输出:
Error type: 0. Missing or invalid default region.
巴基斯坦和其他国家的代码可以工作,但"US"
、"Canada"
、"UK"
等不能工作。
发布于 2018-08-17 08:27:24
我相信代码中有一个bug。我已经修好了。错误存在于PhoneNumberUtil.php中。函数名
private function init($filePrefix) {
在第231行处搜索称为REGION_CODE_FOR_NON_GEO_ENTITY的关键字,该关键字等于在线定义的119中定义的"001“。由于在数组中没有与"001“匹配的键,因此它取消设置第0个元素"US”。我已经修复了这个错误,我将在GitHub上向开发人员报告。新函数如下所示。
private function init($filePrefix) {
$this->currentFilePrefix = dirname(__FILE__) . '/data/' . $filePrefix;
foreach ($this->countryCallingCodeToRegionCodeMap as $regionCodes) {
$this->supportedRegions = array_merge($this->supportedRegions, $regionCodes);
}
$nongeoentity=array_search(self::REGION_CODE_FOR_NON_GEO_ENTITY, $this->supportedRegions);
if($nongeoentity)
unset($this->supportedRegions[array_search(self::REGION_CODE_FOR_NON_GEO_ENTITY, $this->supportedRegions)]);
$this->nanpaRegions = $this->countryCallingCodeToRegionCodeMap[self::NANPA_COUNTRY_CODE];
}
https://stackoverflow.com/questions/51886356
复制相似问题