updated-packages

This commit is contained in:
RafficMohammed
2023-01-08 00:13:22 +05:30
parent 3ff7df7487
commit da241bacb6
12659 changed files with 563377 additions and 510538 deletions

View File

@@ -1,5 +1,5 @@
# This file specifies the revision of the metadata to build from
# It can be a commit, branch or tag of the https://github.com/googlei18n/libphonenumber project
# It can be a commit, branch or tag of the https://github.com/google/libphonenumber project
#
# For more information, look at the phing tasks in build.xml
v8.10.1
v8.13.3

View File

@@ -1,14 +1,12 @@
# libphonenumber for PHP [![Build Status](https://img.shields.io/travis/giggsey/libphonenumber-for-php.svg?style=flat-square)](https://travis-ci.org/giggsey/libphonenumber-for-php) [![Coverage Status](https://img.shields.io/coveralls/giggsey/libphonenumber-for-php.svg?style=flat-square)](https://coveralls.io/r/giggsey/libphonenumber-for-php?branch=master)
# libphonenumber for PHP [![Build Status](https://github.com/giggsey/libphonenumber-for-php/workflows/Continuous%20Integration/badge.svg)](https://github.com/giggsey/libphonenumber-for-php/actions?query=workflow%3A%22Continuous+Integration%22) [![Coverage Status](https://img.shields.io/coveralls/giggsey/libphonenumber-for-php.svg?style=flat-square)](https://coveralls.io/r/giggsey/libphonenumber-for-php?branch=master)
[![Total Downloads](https://poser.pugx.org/giggsey/libphonenumber-for-php/downloads?format=flat-square)](https://packagist.org/packages/giggsey/libphonenumber-for-php)
[![Downloads per month](https://img.shields.io/packagist/dm/giggsey/libphonenumber-for-php.svg?style=flat-square)](https://packagist.org/packages/giggsey/libphonenumber-for-php)
[![Latest Stable Version](https://img.shields.io/packagist/v/giggsey/libphonenumber-for-php.svg?style=flat-square)](https://packagist.org/packages/giggsey/libphonenumber-for-php)
[![License](http://img.shields.io/badge/license-Apache%202.0-red.svg?style=flat-square)](https://packagist.org/packages/giggsey/libphonenumber-for-php)
[![License](https://img.shields.io/badge/license-Apache%202.0-red.svg?style=flat-square)](https://packagist.org/packages/giggsey/libphonenumber-for-php)
## What is it?
A PHP library for parsing, formatting, storing and validating international phone numbers. This library is based on Google's [libphonenumber](https://github.com/googlei18n/libphonenumber).
A PHP library for parsing, formatting, storing and validating international phone numbers. This library is based on Google's [libphonenumber](https://github.com/google/libphonenumber).
- [Installation](#installation)
- [Documentation](#documentation)
@@ -18,7 +16,7 @@ A PHP library for parsing, formatting, storing and validating international phon
- [Quick Examples](#quick-examples)
- [Geocoder](#geocoder)
- [ShortNumberInfo](#shortnumberinfo)
- [Mapping Phone Numbers to carrier](#mapping-phone-numbers-to-carrier)
- [Mapping Phone Numbers to Carrier](#mapping-phone-numbers-to-carrier)
- [Mapping Phone Numbers to TimeZones](#mapping-phone-numbers-to-timezones)
- [FAQ](#faq)
- [Problems with Invalid Numbers?](#problems-with-invalid-numbers)
@@ -28,7 +26,7 @@ A PHP library for parsing, formatting, storing and validating international phon
## Installation
PHP versions 5.3 up to PHP 7.2 are currently supported. HHVM is also supported.
PHP versions 5.3 up to PHP 8.1 are currently supported.
The PECL [mbstring](http://php.net/mbstring) extension is required.
@@ -42,6 +40,10 @@ You can also use any other [PSR-4](http://www.php-fig.org/psr/psr-4/) compliant
If you do not use composer, ensure that you also load any dependencies that this project has, such as [giggsey/locale](https://github.com/giggsey/Locale).
## giggsey/libphonenumber-for-php-lite
If you only want to make sure of the core PhoneNumber Util functionality, you can use [giggsey/libphonenumber-for-php-lite](https://github.com/giggsey/libphonenumber-for-php-lite), which offers a much smaller package size.
## Documentation
- [PhoneNumber Util](docs/PhoneNumberUtil.md)
@@ -72,7 +74,7 @@ This library will try to follow the same version numbers as Google. There could
This does mean that this project may not follow [Semantic Versioning](http://semver.org/), but instead Google's version policy. As a result, jumps in major versions may not actually contain any backwards
incompatible changes. Please read the release notes for such releases.
Google try to release their versions according to Semantic Versioning, as laid out of in their [Versioning Guide](https://github.com/googlei18n/libphonenumber#versioning-and-announcements).
Google try to release their versions according to Semantic Versioning, as laid out of in their [Versioning Guide](https://github.com/google/libphonenumber#versioning-and-announcements).
## Quick Examples
Let's say you have a string representing a phone number from Switzerland. This is how you parse/normalize it into a PhoneNumber object:
@@ -226,9 +228,9 @@ $timeZones = $timeZoneMapper->getTimeZonesForNumber($swissNumberProto);
#### Problems with Invalid Numbers?
This library uses phone number metadata from Google's [libphonenumber](https://github.com/googlei18n/libphonenumber). If this library is working as intended, it should provide the same result as the Java version of Google's project.
This library uses phone number metadata from Google's [libphonenumber](https://github.com/google/libphonenumber). If this library is working as intended, it should provide the same result as the Java version of Google's project.
If you believe that a phone number is returning an incorrect result, first test it with [libphonenumber](https://github.com/googlei18n/libphonenumber) via their [Online Demo](https://libphonenumber.appspot.com/). If that returns the same result as this project, and you feel it is in error, raise it as an Issue with the libphonenumber project.
If you believe that a phone number is returning an incorrect result, first test it with [libphonenumber](https://github.com/google/libphonenumber) via their [Online Demo](https://libphonenumber.appspot.com/). If that returns the same result as this project, and you feel it is in error, raise it as an Issue with the libphonenumber project.
If Google's [Online Demo](https://libphonenumber.appspot.com/) gives a different result to the [libphonenumber-for-php demo](http://giggsey.com/libphonenumber/), then please raise an Issue here.
@@ -242,7 +244,13 @@ If you do need to generate the data, the commands are provided by [Phing](https:
$ vendor/bin/phing compile
```
This compile process clones the [libphonenumber](https://github.com/googlei18n/libphonenumber) project at the version specified in [METADATA-VERSION.txt](METADATA-VERSION.txt).
This compile process clones the [libphonenumber](https://github.com/google/libphonenumber) project at the version specified in [METADATA-VERSION.txt](METADATA-VERSION.txt).
### Running tests
This project uses [PHPUnit Bridge](https://symfony.com/doc/current/components/phpunit_bridge.html) to maintain compatibility for the supported PHP versions.
To run the tests locally, run the `./phpunit` script.
## Integration with frameworks
@@ -250,9 +258,10 @@ Other packages exist that integrate libphonenumber-for-php into frameworks.
| Framework | Packages |
| --------- |:-------------:|
|Symfony|[PhoneNumberBundle](https://github.com/misd-service-development/phone-number-bundle)|
|Symfony|[PhoneNumberBundle](https://github.com/odolbeau/phone-number-bundle)|
|Laravel|[Laravel Phone](https://github.com/Propaganistas/Laravel-Phone)|
|Yii2|[PhoneInput](https://github.com/Borales/yii2-phone-input)|
|Kohana|[PhoneNumber](https://github.com/softmediadev/kohana-phonenumber)|
|TYPO3|[TYPO3 Phone Extension](https://github.com/simonschaufi/typo3-phone)|
These packages are supplied by third parties, and their quality can not be guaranteed.

View File

@@ -13,7 +13,6 @@
"homepage": "https://github.com/giggsey/libphonenumber-for-php",
"license": "Apache-2.0",
"support": {
"irc": "irc://irc.appliedirc.com/lobby",
"source": "https://github.com/giggsey/libphonenumber-for-php",
"issues": "https://github.com/giggsey/libphonenumber-for-php/issues"
},
@@ -47,6 +46,7 @@
"build/",
"docs/",
"tests/",
".github/",
".editorconfig",
".gitattributes",
".gitignore",
@@ -54,26 +54,31 @@
".travis.yml",
"build.xml",
"libphonenumber-for-php.spec",
"phpunit.xml.dist"
"phpunit.xml.dist",
"phpunit"
]
},
"require": {
"php": ">=5.3.2",
"ext-mbstring": "*",
"giggsey/locale": "^1.2"
"giggsey/locale": "^1.7|^2.0",
"symfony/polyfill-mbstring": "^1.17"
},
"require-dev": {
"phing/phing": "^2.7",
"pear/versioncontrol_git": "^0.5",
"pear/pear-core-minimal": "^1.9",
"pear/pear_exception": "^1.0",
"phpunit/phpunit": "^4.8.36|^5.0",
"symfony/console": "^2.8|^3.0",
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/console": "^2.8|^3.0|^v4.4|^v5.2",
"php-coveralls/php-coveralls": "^1.0|^2.0"
},
"extra": {
"branch-alias": {
"dev-master": "8.x-dev"
}
},
"scripts": {
"test": "./phpunit",
"metadata": "vendor/bin/phing compile"
}
}

View File

@@ -33,37 +33,36 @@ class AlternateFormatsCountryCodeSet {
13 => 58,
14 => 61,
15 => 62,
16 => 63,
17 => 64,
18 => 66,
19 => 81,
20 => 84,
21 => 90,
22 => 91,
23 => 94,
24 => 95,
25 => 255,
26 => 350,
27 => 351,
28 => 352,
29 => 358,
30 => 359,
31 => 372,
32 => 373,
33 => 380,
34 => 381,
35 => 385,
36 => 505,
37 => 506,
38 => 595,
39 => 675,
40 => 676,
41 => 679,
42 => 855,
43 => 856,
44 => 971,
45 => 972,
46 => 995,
16 => 64,
17 => 66,
18 => 81,
19 => 84,
20 => 90,
21 => 91,
22 => 94,
23 => 95,
24 => 255,
25 => 350,
26 => 351,
27 => 352,
28 => 358,
29 => 359,
30 => 372,
31 => 373,
32 => 380,
33 => 381,
34 => 385,
35 => 505,
36 => 506,
37 => 595,
38 => 675,
39 => 676,
40 => 679,
41 => 855,
42 => 856,
43 => 971,
44 => 972,
45 => 995,
);
}

View File

@@ -110,7 +110,7 @@ class AsYouTypeFormatter
* and/or NDD, etc.
* @var string
*/
private $prefixBeforeNationalNumber;
private $prefixBeforeNationalNumber = '';
/**
* @var bool
@@ -144,29 +144,13 @@ class AsYouTypeFormatter
*/
private static $emptyMetadata;
/**
* A pattern that is used to match character classes in regular expressions. An example of a
* character class is [1-4]
* @var string
*/
private static $characterClassPattern = "\\[([^\\[\\]])*\\]";
/**
* Any digit in a regular expression that actually denotes a digit. For example, in the regular
* expression 800[0-2]\d{6,10}, the first 2 digits (8 and 0) are standalone digits, but the rest
* are not.
* Two look-aheads are needed before the number following \\d could be a two-digit number, since
* the phone number can be a long as 15 digits.
* @var string
*/
private static $standaloneDigitPattern = "\\d(?=[^,}][^,}])";
/**
* A pattern that is used to determine if a numberFormat under availableFormats is eligible
* to be used by the AYTF. It is eligible when the format element under numberFormat contains
* groups of the dollar sign followed by a single digit, separated by valid phone number punctuation.
* This prevents invalid punctuation (such as the star sign in Israeli star numbers) getting
* into the output of the AYTF.
* into the output of the AYTF. We require that the first group is present in the output pattern to ensure
* no data is lost while formatting; when we format as you type, this should always be the case.
* @var string
*/
private static $eligibleFormatPattern;
@@ -203,7 +187,8 @@ class AsYouTypeFormatter
self::$emptyMetadata->setInternationalPrefix('NA');
self::$eligibleFormatPattern = '[' . PhoneNumberUtil::VALID_PUNCTUATION . ']*'
. "(\\$\\d" . '[' . PhoneNumberUtil::VALID_PUNCTUATION . ']*)+';
. "\\$1" . "[" . PhoneNumberUtil::VALID_PUNCTUATION . "]*(\\$\\d"
. "[" . PhoneNumberUtil::VALID_PUNCTUATION . "]*)*";
}
}
@@ -217,7 +202,7 @@ class AsYouTypeFormatter
$this->phoneUtil = PhoneNumberUtil::getInstance();
$this->defaultCountry = $regionCode;
$this->defaultCountry = strtoupper($regionCode);
$this->currentMetadata = $this->getMetadataForRegion($this->defaultCountry);
$this->defaultMetadata = $this->currentMetadata;
}
@@ -256,8 +241,10 @@ class AsYouTypeFormatter
}
if ($this->createFormattingTemplate($numberFormat)) {
$this->currentFormattingPattern = $pattern;
$nationalPrefixSeparatorsMatcher = new Matcher(self::$nationalPrefixSeparatorsPattern,
$numberFormat->getNationalPrefixFormattingRule());
$nationalPrefixSeparatorsMatcher = new Matcher(
self::$nationalPrefixSeparatorsPattern,
$numberFormat->getNationalPrefixFormattingRule()
);
$this->shouldAddSpaceAfterNationalPrefix = $nationalPrefixSeparatorsMatcher->find();
// With a new formatting template, the matched position using the old template
// needs to be reset.
@@ -289,7 +276,8 @@ class AsYouTypeFormatter
// prefix.
if ($this->extractedNationalPrefix !== ''
&& PhoneNumberUtil::formattingRuleHasFirstGroupOnly(
$format->getNationalPrefixFormattingRule())
$format->getNationalPrefixFormattingRule()
)
&& !$format->getNationalPrefixOptionalWhenFormatting()
&& !$format->hasDomesticCarrierCodeFormattingRule()) {
// If it is a national number that had a national prefix, any rules that aren't valid with a
@@ -302,7 +290,8 @@ class AsYouTypeFormatter
if ($this->extractedNationalPrefix === ''
&& !$this->isCompleteNumber
&& !PhoneNumberUtil::formattingRuleHasFirstGroupOnly(
$format->getNationalPrefixFormattingRule())
$format->getNationalPrefixFormattingRule()
)
&& !$format->getNationalPrefixOptionalWhenFormatting()) {
// This number was entered without a national prefix, and this formatting rule requires one,
// so we discard it.
@@ -323,14 +312,14 @@ class AsYouTypeFormatter
*/
private function narrowDownPossibleFormats($leadingDigits)
{
$indexOfLeadingDigitsPattern = mb_strlen($leadingDigits) - self::$minLeadingDigitsLength;
$indexOfLeadingDigitsPattern = \mb_strlen($leadingDigits) - self::$minLeadingDigitsLength;
foreach ($this->possibleFormats as $key => $format) {
if ($format->leadingDigitsPatternSize() === 0) {
// Keep everything that isn't restricted by leading digits.
continue;
}
$lastLeadingDigitsPattern = min($indexOfLeadingDigitsPattern, $format->leadingDigitsPatternSize() - 1);
$lastLeadingDigitsPattern = \min($indexOfLeadingDigitsPattern, $format->leadingDigitsPatternSize() - 1);
$leadingDigitsPattern = $format->getLeadingDigitsPattern($lastLeadingDigitsPattern);
$m = new Matcher($leadingDigitsPattern, $leadingDigits);
if (!$m->lookingAt()) {
@@ -347,22 +336,9 @@ class AsYouTypeFormatter
{
$numberPattern = $format->getPattern();
// The formatter doesn't format numbers when numberPattern contains "|", e.g.
// (20|3)\d{4}. In those cases we quickly return.
if (mb_stripos('|', $numberPattern) !== false) {
return false;
}
// replace anything in the form of [..] with \d
$characterClassMatcher = new Matcher(self::$characterClassPattern, $numberPattern);
$numberPattern = $characterClassMatcher->replaceAll("\\\\d");
// Replace any standalone digit (not the one in d{}) with \d
$standAloneDigitMatcher = new Matcher(self::$standaloneDigitPattern, $numberPattern);
$numberPattern = $standAloneDigitMatcher->replaceAll("\\\\d");
$this->formattingTemplate = '';
$tempTemplate = $this->getFormattingTemplate($numberPattern, $format->getFormat());
if (mb_strlen($tempTemplate) > 0) {
if ($tempTemplate !== '') {
$this->formattingTemplate .= $tempTemplate;
return true;
}
@@ -386,13 +362,13 @@ class AsYouTypeFormatter
$aPhoneNumber = $m->group();
// No formatting template can be created if the number of digits entered entered so far
// is longer than the maximum the current formatting rule can accommodate.
if (mb_strlen($aPhoneNumber) < mb_strlen($this->nationalNumber)) {
if (\mb_strlen($aPhoneNumber) < \mb_strlen($this->nationalNumber)) {
return '';
}
// Formats the number according to $numberFormat
$template = preg_replace('/' . $numberPattern . '/' . PhoneNumberUtil::REGEX_FLAGS, $numberFormat, $aPhoneNumber);
$template = \preg_replace('/' . $numberPattern . '/' . PhoneNumberUtil::REGEX_FLAGS, $numberFormat, $aPhoneNumber);
// Replaces each digit with character self::$digitPlattern
$template = preg_replace('/9/', self::$digitPattern, $template);
$template = \preg_replace('/9/', self::$digitPattern, $template);
return $template;
}
@@ -461,7 +437,7 @@ class AsYouTypeFormatter
{
$this->accruedInput .= $nextChar;
if ($rememberPosition) {
$this->originalPosition = mb_strlen($this->accruedInput);
$this->originalPosition = \mb_strlen($this->accruedInput);
}
// We do formatting on-the-fly only when each character entered is either a digit, or a plus
// sign (accepted at the start of the number only).
@@ -495,7 +471,7 @@ class AsYouTypeFormatter
// We start to attempt to format only when at least MIN_LEADING_DIGITS_LENGTH digits (the plus
// sign is counted as a digit as well for this purpose) have been entered.
switch (mb_strlen($this->accruedInputWithoutFormatting)) {
switch (\mb_strlen($this->accruedInputWithoutFormatting)) {
case 0:
case 1:
case 2:
@@ -510,6 +486,7 @@ class AsYouTypeFormatter
return $this->attemptToChooseFormattingPattern();
}
// fall through
// no break
default:
if ($this->isExpectingCountryCallingCode) {
if ($this->attemptToExtractCountryCallingCode()) {
@@ -517,13 +494,13 @@ class AsYouTypeFormatter
}
return $this->prefixBeforeNationalNumber . $this->nationalNumber;
}
if (count($this->possibleFormats) > 0) {
if (\count($this->possibleFormats) > 0) {
// The formatting patterns are already chosen.
$tempNationalNumber = $this->inputDigitHelper($nextChar);
// See if the accrued digits can be formatted properly already. If not, use the results
// from inputDigitHelper, which does formatting based on the formatting pattern chosen.
$formattedNumber = $this->attemptToFormatAccruedDigits();
if (mb_strlen($formattedNumber) > 0) {
if ($formattedNumber !== '') {
return $formattedNumber;
}
$this->narrowDownPossibleFormats($this->nationalNumber);
@@ -570,14 +547,14 @@ class AsYouTypeFormatter
*/
private function ableToExtractLongerNdd()
{
if (mb_strlen($this->extractedNationalPrefix) > 0) {
if (\mb_strlen($this->extractedNationalPrefix) > 0) {
// Put the extracted NDD back to the national number before attempting to extract a new NDD.
$this->nationalNumber = $this->extractedNationalPrefix . $this->nationalNumber;
// Remove the previously extracted NDD from prefixBeforeNationalNumber. We cannot simply set
// it to empty string because people sometimes incorrectly enter national prefix after the
// country code, e.g. +44 (0)20-1234-5678.
$indexOfPreviousNdd = mb_strrpos($this->prefixBeforeNationalNumber, $this->extractedNationalPrefix);
$this->prefixBeforeNationalNumber = mb_substr(str_pad($this->prefixBeforeNationalNumber, $indexOfPreviousNdd), 0, $indexOfPreviousNdd);
$indexOfPreviousNdd = \mb_strrpos($this->prefixBeforeNationalNumber, $this->extractedNationalPrefix);
$this->prefixBeforeNationalNumber = \mb_substr(\str_pad($this->prefixBeforeNationalNumber, $indexOfPreviousNdd), 0, $indexOfPreviousNdd);
}
return ($this->extractedNationalPrefix !== $this->removeNationalPrefixFromNationalNumber());
}
@@ -590,8 +567,8 @@ class AsYouTypeFormatter
{
$plusCharsMatcher = new Matcher(PhoneNumberUtil::$PLUS_CHARS_PATTERN, $nextChar);
return preg_match('/' . PhoneNumberUtil::DIGITS . '/' . PhoneNumberUtil::REGEX_FLAGS, $nextChar)
|| (mb_strlen($this->accruedInput) === 1 &&
return \preg_match('/' . PhoneNumberUtil::DIGITS . '/' . PhoneNumberUtil::REGEX_FLAGS, $nextChar)
|| (\mb_strlen($this->accruedInput) === 1 &&
$plusCharsMatcher->matches());
}
@@ -608,7 +585,20 @@ class AsYouTypeFormatter
$nationalPrefixSeparatorsMatcher = new Matcher(self::$nationalPrefixSeparatorsPattern, $numberFormat->getNationalPrefixFormattingRule());
$this->shouldAddSpaceAfterNationalPrefix = $nationalPrefixSeparatorsMatcher->find();
$formattedNumber = $m->replaceAll($numberFormat->getFormat());
return $this->appendNationalNumber($formattedNumber);
// Check that we did not remove nor add any extra digits when we matched
// this formatting pattern. This usually happens after we entered the last
// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when
// formatted but AYTF should retain all the number entered and not change
// in order to match a format (of same leading digits and length) display
// in that way.
$fullOutput = $this->appendNationalNumber($formattedNumber);
$formattedNumberDigitsOnly = PhoneNumberUtil::normalizeDiallableCharsOnly($fullOutput);
if ($formattedNumberDigitsOnly === $this->accruedInputWithoutFormatting) {
// If it's the same (i.e entered number and format is same), then it's
// safe to return this in formatted number as nothing is lost / added.
return $fullOutput;
}
}
}
return '';
@@ -627,9 +617,9 @@ class AsYouTypeFormatter
$accruedInputIndex = 0;
$currentOutputIndex = 0;
$currentOutputLength = mb_strlen($this->currentOutput);
$currentOutputLength = \mb_strlen($this->currentOutput);
while ($accruedInputIndex < $this->positionToRemember && $currentOutputIndex < $currentOutputLength) {
if (mb_substr($this->accruedInputWithoutFormatting, $accruedInputIndex, 1) == mb_substr($this->currentOutput, $currentOutputIndex, 1)) {
if (\mb_substr($this->accruedInputWithoutFormatting, $accruedInputIndex, 1) == \mb_substr($this->currentOutput, $currentOutputIndex, 1)) {
$accruedInputIndex++;
}
$currentOutputIndex++;
@@ -646,9 +636,9 @@ class AsYouTypeFormatter
*/
private function appendNationalNumber($nationalNumber)
{
$prefixBeforeNationalNumberLength = mb_strlen($this->prefixBeforeNationalNumber);
$prefixBeforeNationalNumberLength = \mb_strlen($this->prefixBeforeNationalNumber);
if ($this->shouldAddSpaceAfterNationalPrefix && $prefixBeforeNationalNumberLength > 0
&& mb_substr($this->prefixBeforeNationalNumber, $prefixBeforeNationalNumberLength - 1, 1)
&& \mb_substr($this->prefixBeforeNationalNumber, $prefixBeforeNationalNumberLength - 1, 1)
!= self::$seperatorBeforeNationalNumber
) {
// We want to add a space after the national prefix if the national prefix formatting rule
@@ -669,11 +659,11 @@ class AsYouTypeFormatter
{
// We start to attempt to format only when at least MIN_LEADING_DIGITS_LENGTH digits of national
// number (excluding national prefix) have been entered.
if (mb_strlen($this->nationalNumber) >= self::$minLeadingDigitsLength) {
if (\mb_strlen($this->nationalNumber) >= self::$minLeadingDigitsLength) {
$this->getAvailableFormats($this->nationalNumber);
// See if the accrued digits can be formatted properly already.
$formattedNumber = $this->attemptToFormatAccruedDigits();
if (mb_strlen($formattedNumber) > 0) {
if ($formattedNumber !== '') {
return $formattedNumber;
}
return $this->maybeCreateNewTemplate() ? $this->inputAccruedNationalNumber() : $this->accruedInput;
@@ -689,11 +679,11 @@ class AsYouTypeFormatter
*/
private function inputAccruedNationalNumber()
{
$lengthOfNationalNumber = mb_strlen($this->nationalNumber);
$lengthOfNationalNumber = \mb_strlen($this->nationalNumber);
if ($lengthOfNationalNumber > 0) {
$tempNationalNumber = '';
for ($i = 0; $i < $lengthOfNationalNumber; $i++) {
$tempNationalNumber = $this->inputDigitHelper(mb_substr($this->nationalNumber, $i, 1));
$tempNationalNumber = $this->inputDigitHelper(\mb_substr($this->nationalNumber, $i, 1));
}
return $this->ableToFormat ? $this->appendNationalNumber($tempNationalNumber) : $this->accruedInput;
}
@@ -712,8 +702,8 @@ class AsYouTypeFormatter
// that national significant numbers in NANPA always start with [2-9] after the national prefix.
// Numbers beginning with 1[01] can only be short/emergency numbers, which don't need the
// national prefix.
return ($this->currentMetadata->getCountryCode() == 1) && (mb_substr($this->nationalNumber, 0, 1) == '1')
&& (mb_substr($this->nationalNumber, 1, 1) != '0') && (mb_substr($this->nationalNumber, 1, 1) != '1');
return ($this->currentMetadata->getCountryCode() == 1) && (\mb_substr($this->nationalNumber, 0, 1) == '1')
&& (\mb_substr($this->nationalNumber, 1, 1) != '0') && (\mb_substr($this->nationalNumber, 1, 1) != '1');
}
/**
@@ -737,11 +727,11 @@ class AsYouTypeFormatter
// for numbers entered without area code.
$this->isCompleteNumber = true;
$startOfNationalNumber = $m->end();
$this->prefixBeforeNationalNumber .= mb_substr($this->nationalNumber, 0, $startOfNationalNumber);
$this->prefixBeforeNationalNumber .= \mb_substr($this->nationalNumber, 0, $startOfNationalNumber);
}
}
$nationalPrefix = mb_substr($this->nationalNumber, 0, $startOfNationalNumber);
$this->nationalNumber = mb_substr($this->nationalNumber, $startOfNationalNumber);
$nationalPrefix = \mb_substr($this->nationalNumber, 0, $startOfNationalNumber);
$this->nationalNumber = \mb_substr($this->nationalNumber, $startOfNationalNumber);
return $nationalPrefix;
}
@@ -759,9 +749,9 @@ class AsYouTypeFormatter
if ($iddMatcher->lookingAt()) {
$this->isCompleteNumber = true;
$startOfCountryCallingCode = $iddMatcher->end();
$this->nationalNumber = mb_substr($this->accruedInputWithoutFormatting, $startOfCountryCallingCode);
$this->prefixBeforeNationalNumber = mb_substr($this->accruedInputWithoutFormatting, 0, $startOfCountryCallingCode);
if (mb_substr($this->accruedInputWithoutFormatting, 0, 1) != PhoneNumberUtil::PLUS_SIGN) {
$this->nationalNumber = \mb_substr($this->accruedInputWithoutFormatting, $startOfCountryCallingCode);
$this->prefixBeforeNationalNumber = \mb_substr($this->accruedInputWithoutFormatting, 0, $startOfCountryCallingCode);
if (\mb_substr($this->accruedInputWithoutFormatting, 0, 1) != PhoneNumberUtil::PLUS_SIGN) {
$this->prefixBeforeNationalNumber .= self::$seperatorBeforeNationalNumber;
}
return true;
@@ -777,7 +767,7 @@ class AsYouTypeFormatter
*/
private function attemptToExtractCountryCallingCode()
{
if (mb_strlen($this->nationalNumber) == 0) {
if ($this->nationalNumber === '') {
return false;
}
$numberWithoutCountryCallingCode = '';
@@ -821,7 +811,7 @@ class AsYouTypeFormatter
$this->nationalNumber .= $normalizedChar;
}
if ($rememberPosition) {
$this->positionToRemember = mb_strlen($this->accruedInputWithoutFormatting);
$this->positionToRemember = \mb_strlen($this->accruedInputWithoutFormatting);
}
return $normalizedChar;
}
@@ -837,13 +827,15 @@ class AsYouTypeFormatter
$digitMatcher = new Matcher(self::$digitPattern, $this->formattingTemplate);
if ($digitMatcher->find($this->lastMatchPosition)) {
$tempTemplate = $digitMatcher->replaceFirst($nextChar);
$this->formattingTemplate = $tempTemplate . mb_substr($this->formattingTemplate, mb_strlen($tempTemplate,
'UTF-8'), null, 'UTF-8');
$this->formattingTemplate = $tempTemplate . \mb_substr($this->formattingTemplate, \mb_strlen(
$tempTemplate,
'UTF-8'
), null, 'UTF-8');
$this->lastMatchPosition = $digitMatcher->start();
return mb_substr($this->formattingTemplate, 0, $this->lastMatchPosition + 1);
return \mb_substr($this->formattingTemplate, 0, $this->lastMatchPosition + 1);
}
if (count($this->possibleFormats) === 1) {
if (\count($this->possibleFormats) === 1) {
// More digits are entered than we could handle, and there are no other valid patterns to
// try.
$this->ableToFormat = false;

View File

@@ -35,10 +35,6 @@ class CountryCodeToRegionCodeMapForTesting {
array (
0 => 'FR',
),
36 =>
array (
0 => 'HU',
),
39 =>
array (
0 => 'IT',
@@ -72,6 +68,10 @@ class CountryCodeToRegionCodeMapForTesting {
array (
0 => 'BR',
),
57 =>
array (
0 => 'CO',
),
61 =>
array (
0 => 'AU',

View File

@@ -36,11 +36,18 @@ class ExactGrouping extends AbstractLeniency
return false;
}
return PhoneNumberMatcher::checkNumberGroupingIsValid($number, $candidate, $util,
return PhoneNumberMatcher::checkNumberGroupingIsValid(
$number,
$candidate,
$util,
function (PhoneNumberUtil $util, PhoneNumber $number, $normalizedCandidate, $expectedNumberGroups) {
return PhoneNumberMatcher::allNumberGroupsAreExactlyPresent(
$util, $number, $normalizedCandidate, $expectedNumberGroups
$util,
$number,
$normalizedCandidate,
$expectedNumberGroups
);
});
}
);
}
}

View File

@@ -38,11 +38,17 @@ class StrictGrouping extends AbstractLeniency
}
return PhoneNumberMatcher::checkNumberGroupingIsValid(
$number, $candidate, $util,
$number,
$candidate,
$util,
function (PhoneNumberUtil $util, PhoneNumber $number, $normalizedCandidate, $expectedNumberGroups) {
return PhoneNumberMatcher::allNumberGroupsRemainGrouped(
$util, $number, $normalizedCandidate, $expectedNumberGroups
$util,
$number,
$normalizedCandidate,
$expectedNumberGroups
);
});
}
);
}
}

View File

@@ -21,7 +21,7 @@ class Matcher
/**
* @var string
*/
protected $subject;
protected $subject = '';
/**
* @var array
@@ -36,8 +36,8 @@ class Matcher
*/
public function __construct($pattern, $subject)
{
$this->pattern = str_replace('/', '\/', $pattern);
$this->subject = $subject;
$this->pattern = str_replace('/', '\/', (string)$pattern);
$this->subject = (string)$subject;
}
protected function doMatch($type = 'find', $offset = 0)
@@ -69,7 +69,7 @@ class Matcher
foreach ($groups as $group) {
$positions[] = array(
$group[0],
$offset + mb_strlen(mb_strcut($search, 0, $group[1]))
$offset + mb_strlen(substr($search, 0, $group[1]))
);
}

View File

@@ -59,6 +59,8 @@ class MultiFileMetadataSourceImpl implements MetadataSourceInterface
*/
public function getMetadataForRegion($regionCode)
{
$regionCode = strtoupper($regionCode);
if (!array_key_exists($regionCode, $this->regionToMetadataMap)) {
// The regionCode here will be valid and won't be '001', so we don't need to worry about
// what to pass in for the country calling code.
@@ -89,6 +91,8 @@ class MultiFileMetadataSourceImpl implements MetadataSourceInterface
*/
public function loadMetadataFromFile($filePrefix, $regionCode, $countryCallingCode, MetadataLoaderInterface $metadataLoader)
{
$regionCode = strtoupper($regionCode);
$isNonGeoRegion = PhoneNumberUtil::REGION_CODE_FOR_NON_GEO_ENTITY === $regionCode;
$fileName = $filePrefix . '_' . ($isNonGeoRegion ? $countryCallingCode : $regionCode) . '.php';
if (!is_readable($fileName)) {

View File

@@ -34,7 +34,7 @@ class NumberFormat
/**
* @var string
*/
protected $nationalPrefixFormattingRule;
protected $nationalPrefixFormattingRule = '';
/**
* @var bool
@@ -53,7 +53,7 @@ class NumberFormat
/**
* @var string
*/
protected $domesticCarrierCodeFormattingRule;
protected $domesticCarrierCodeFormattingRule = '';
/**
* @var bool
@@ -79,13 +79,13 @@ class NumberFormat
$this->leadingDigitsPattern = array();
$this->hasNationalPrefixFormattingRule = false;
$this->nationalPrefixFormattingRule = null;
$this->nationalPrefixFormattingRule = '';
$this->hasNationalPrefixOptionalWhenFormatting = false;
$this->nationalPrefixOptionalWhenFormatting = false;
$this->hasDomesticCarrierCodeFormattingRule = false;
$this->domesticCarrierCodeFormattingRule = null;
$this->domesticCarrierCodeFormattingRule = '';
return $this;
}
@@ -230,7 +230,7 @@ class NumberFormat
public function setNationalPrefixFormattingRule($value)
{
$this->hasNationalPrefixFormattingRule = true;
$this->nationalPrefixFormattingRule = $value;
$this->nationalPrefixFormattingRule = (string)$value;
return $this;
}
@@ -240,7 +240,7 @@ class NumberFormat
*/
public function clearNationalPrefixFormattingRule()
{
$this->nationalPrefixFormattingRule = null;
$this->nationalPrefixFormattingRule = '';
return $this;
}
@@ -268,7 +268,7 @@ class NumberFormat
public function setDomesticCarrierCodeFormattingRule($value)
{
$this->hasDomesticCarrierCodeFormattingRule = true;
$this->domesticCarrierCodeFormattingRule = $value;
$this->domesticCarrierCodeFormattingRule = (string)$value;
return $this;
}

View File

@@ -25,7 +25,6 @@ class PhoneMetadata
protected $nationalPrefix;
protected $preferredExtnPrefix;
protected $mainCountryForCode = false;
protected $leadingZeroPossible = false;
protected $mobileNumberPortableRegion = false;
protected $generalDesc;
/**
@@ -118,11 +117,6 @@ class PhoneMetadata
return $this;
}
public function hasLeadingZeroPossible()
{
return $this->leadingZeroPossible !== null;
}
public function hasMobileNumberPortableRegion()
{
return $this->mobileNumberPortableRegion !== null;
@@ -135,7 +129,7 @@ class PhoneMetadata
public function numberFormatSize()
{
return count($this->numberFormat);
return \count($this->numberFormat);
}
/**
@@ -149,7 +143,7 @@ class PhoneMetadata
public function intlNumberFormatSize()
{
return count($this->intlNumberFormat);
return \count($this->intlNumberFormat);
}
public function getIntlNumberFormat($index)
@@ -288,10 +282,6 @@ class PhoneMetadata
$output['leadingDigits'] = $this->getLeadingDigits();
}
if ($this->hasLeadingZeroPossible()) {
$output['leadingZeroPossible'] = $this->isLeadingZeroPossible();
}
if ($this->hasMobileNumberPortableRegion()) {
$output['mobileNumberPortableRegion'] = $this->isMobileNumberPortableRegion();
}
@@ -807,23 +797,6 @@ class PhoneMetadata
return $this;
}
public function isLeadingZeroPossible()
{
return $this->leadingZeroPossible;
}
public function setLeadingZeroPossible($value)
{
$this->leadingZeroPossible = $value;
return $this;
}
public function clearLeadingZeroPossible()
{
$this->leadingZeroPossible = false;
return $this;
}
public function isMobileNumberPortableRegion()
{
return $this->mobileNumberPortableRegion;
@@ -976,10 +949,6 @@ class PhoneMetadata
$this->setLeadingDigits($input['leadingDigits']);
}
if (isset($input['leadingZeroPossible'])) {
$this->setLeadingZeroPossible($input['leadingZeroPossible']);
}
if (isset($input['mobileNumberPortableRegion'])) {
$this->setMobileNumberPortableRegion($input['mobileNumberPortableRegion']);
}

View File

@@ -518,7 +518,7 @@ class PhoneNumber implements \Serializable
$sameNational = $this->hasNationalNumber() == $other->hasNationalNumber() &&
(!$this->hasNationalNumber() || $this->getNationalNumber() == $other->getNationalNumber());
$sameExt = $this->hasExtension() == $other->hasExtension() &&
(!$this->hasExtension() || $this->hasExtension() == $other->hasExtension());
(!$this->hasExtension() || $this->getExtension() == $other->getExtension());
$sameLead = $this->hasItalianLeadingZero() == $other->hasItalianLeadingZero() &&
(!$this->hasItalianLeadingZero() || $this->isItalianLeadingZero() == $other->isItalianLeadingZero());
$sameZeros = $this->getNumberOfLeadingZeros() == $other->getNumberOfLeadingZeros();
@@ -565,17 +565,20 @@ class PhoneNumber implements \Serializable
*/
public function serialize()
{
return serialize(
array(
$this->countryCode,
$this->nationalNumber,
$this->extension,
$this->italianLeadingZero,
$this->numberOfLeadingZeros,
$this->rawInput,
$this->countryCodeSource,
$this->preferredDomesticCarrierCode
)
return serialize($this->__serialize());
}
public function __serialize()
{
return array(
$this->countryCode,
$this->nationalNumber,
$this->extension,
$this->italianLeadingZero,
$this->numberOfLeadingZeros,
$this->rawInput,
$this->countryCodeSource,
$this->preferredDomesticCarrierCode
);
}
@@ -584,8 +587,11 @@ class PhoneNumber implements \Serializable
*/
public function unserialize($serialized)
{
$data = unserialize($serialized);
$this->__unserialize(unserialize($serialized));
}
public function __unserialize($data)
{
list(
$this->countryCode,
$this->nationalNumber,
@@ -595,7 +601,7 @@ class PhoneNumber implements \Serializable
$this->rawInput,
$this->countryCodeSource,
$this->preferredDomesticCarrierCode
) = $data;
) = $data;
if ($this->numberOfLeadingZeros > 1) {
$this->hasNumberOfLeadingZeros = true;

View File

@@ -28,7 +28,6 @@ class PhoneNumberMatch
* @param int $start The start index into the target text
* @param string $rawString The matched substring of the target text
* @param PhoneNumber $number The matched phone number
* @throws \NullPointerException
*/
public function __construct($start, $rawString, PhoneNumber $number)
{
@@ -37,7 +36,7 @@ class PhoneNumberMatch
}
if ($rawString === null) {
throw new \NullPointerException;
throw new \InvalidArgumentException('$rawString must be a string');
}
$this->start = $start;
@@ -69,7 +68,7 @@ class PhoneNumberMatch
*/
public function end()
{
return $this->start + mb_strlen($this->rawString);
return $this->start + \mb_strlen($this->rawString);
}
/**

View File

@@ -103,7 +103,7 @@ class PhoneNumberMatcher implements \Iterator
protected static function init()
{
static::$alternateFormatsFilePrefix = dirname(__FILE__) . '/data/' . static::META_DATA_FILE_PREFIX;
static::$alternateFormatsFilePrefix = \dirname(__FILE__) . '/data/' . static::META_DATA_FILE_PREFIX;
static::$innerMatches = array(
// Breaks on the slash - e.g. "651-234-2345/332-445-1234"
@@ -178,10 +178,8 @@ class PhoneNumberMatcher implements \Iterator
static::$leadClass = $leadClass;
// Init extension patterns from PhoneNumberUtil
PhoneNumberUtil::initCapturingExtnDigits();
PhoneNumberUtil::initExtnPatterns();
// Phone number pattern allowing optional punctuation.
static::$pattern = '(?:' . $leadClass . $punctuation . ')' . $leadLimit
. $digitSequence . '(?:' . $punctuation . $digitSequence . ')' . $blockLimit
@@ -270,7 +268,6 @@ class PhoneNumberMatcher implements \Iterator
* @param AbstractLeniency $leniency The leniency to use when evaluating candidate phone numbers
* @param int $maxTries The maximum number of invalid numbers to try before giving up on the text.
* This is to cover degenerate cases where the text has a lot of false positives in it. Must be >= 0
* @throws \NullPointerException
* @throws \InvalidArgumentException
*/
public function __construct(PhoneNumberUtil $util, $text, $country, AbstractLeniency $leniency, $maxTries)
@@ -303,7 +300,7 @@ class PhoneNumberMatcher implements \Iterator
while (($this->maxTries > 0) && $matcher->find($index)) {
$start = $matcher->start();
$cutLength = $matcher->end() - $start;
$candidate = mb_substr($this->text, $start, $cutLength);
$candidate = \mb_substr($this->text, $start, $cutLength);
// Check for extra numbers at the end.
// TODO: This is the place to start when trying to support extraction of multiple phone number
@@ -315,7 +312,7 @@ class PhoneNumberMatcher implements \Iterator
return $match;
}
$index = $start + mb_strlen($candidate);
$index = $start + \mb_strlen($candidate);
$this->maxTries--;
}
@@ -335,7 +332,7 @@ class PhoneNumberMatcher implements \Iterator
$trailingCharsMatcher = new Matcher($pattern, $candidate);
if ($trailingCharsMatcher->find()) {
$startChar = $trailingCharsMatcher->start();
$candidate = mb_substr($candidate, 0, $startChar);
$candidate = \mb_substr($candidate, 0, $startChar);
}
return $candidate;
}
@@ -352,12 +349,12 @@ class PhoneNumberMatcher implements \Iterator
public static function isLatinLetter($letter)
{
// Combining marks are a subset of non-spacing-mark.
if (preg_match('/\p{L}/u', $letter) !== 1 && preg_match('/\p{Mn}/u', $letter) !== 1) {
if (\preg_match('/\p{L}/u', $letter) !== 1 && \preg_match('/\p{Mn}/u', $letter) !== 1) {
return false;
}
return (preg_match('/\p{Latin}/u', $letter) === 1)
|| (preg_match('/\pM+/u', $letter) === 1);
return (\preg_match('/\p{Latin}/u', $letter) === 1)
|| (\preg_match('/\pM+/u', $letter) === 1);
}
/**
@@ -366,7 +363,7 @@ class PhoneNumberMatcher implements \Iterator
*/
protected static function isInvalidPunctuationSymbol($character)
{
return $character == '%' || preg_match('/\p{Sc}/u', $character);
return $character == '%' || \preg_match('/\p{Sc}/u', $character);
}
/**
@@ -387,7 +384,7 @@ class PhoneNumberMatcher implements \Iterator
// Skip potential time-stamps.
$timeStampMatcher = new Matcher(static::$timeStamps, $candidate);
if ($timeStampMatcher->find()) {
$followingText = mb_substr($this->text, $offset + mb_strlen($candidate));
$followingText = \mb_substr($this->text, $offset + \mb_strlen($candidate));
$timeStampSuffixMatcher = new Matcher(static::$timeStampsSuffix, $followingText);
if ($timeStampSuffixMatcher->lookingAt()) {
return null;
@@ -422,8 +419,10 @@ class PhoneNumberMatcher implements \Iterator
while ($groupMatcher->find() && $this->maxTries > 0) {
if ($isFirstMatch) {
// We should handle any group before this one too.
$group = static::trimAfterFirstMatch(PhoneNumberUtil::$UNWANTED_END_CHAR_PATTERN,
mb_substr($candidate, 0, $groupMatcher->start()));
$group = static::trimAfterFirstMatch(
PhoneNumberUtil::$UNWANTED_END_CHAR_PATTERN,
\mb_substr($candidate, 0, $groupMatcher->start())
);
$match = $this->parseAndVerify($group, $offset);
if ($match !== null) {
@@ -432,8 +431,10 @@ class PhoneNumberMatcher implements \Iterator
$this->maxTries--;
$isFirstMatch = false;
}
$group = static::trimAfterFirstMatch(PhoneNumberUtil::$UNWANTED_END_CHAR_PATTERN,
$groupMatcher->group(1));
$group = static::trimAfterFirstMatch(
PhoneNumberUtil::$UNWANTED_END_CHAR_PATTERN,
$groupMatcher->group(1)
);
$match = $this->parseAndVerify($group, $offset + $groupMatcher->start(1));
if ($match !== null) {
return $match;
@@ -471,15 +472,15 @@ class PhoneNumberMatcher implements \Iterator
// punctuation, check the previous character.
$leadClassMatcher = new Matcher(static::$leadClass, $candidate);
if ($offset > 0 && !$leadClassMatcher->lookingAt()) {
$previousChar = mb_substr($this->text, $offset - 1, 1);
$previousChar = \mb_substr($this->text, $offset - 1, 1);
// We return null if it is a latin letter or an invalid punctuation symbol.
if (static::isInvalidPunctuationSymbol($previousChar) || static::isLatinLetter($previousChar)) {
return null;
}
}
$lastCharIndex = $offset + mb_strlen($candidate);
if ($lastCharIndex < mb_strlen($this->text)) {
$nextChar = mb_substr($this->text, $lastCharIndex, 1);
$lastCharIndex = $offset + \mb_strlen($candidate);
if ($lastCharIndex < \mb_strlen($this->text)) {
$nextChar = \mb_substr($this->text, $lastCharIndex, 1);
if (static::isInvalidPunctuationSymbol($nextChar) || static::isLatinLetter($nextChar)) {
return null;
}
@@ -520,23 +521,23 @@ class PhoneNumberMatcher implements \Iterator
if ($number->getCountryCodeSource() !== CountryCodeSource::FROM_DEFAULT_COUNTRY) {
// First skip the country code if the normalized candidate contained it.
$countryCode = $number->getCountryCode();
$fromIndex = mb_strpos($normalizedCandidate, $countryCode) + mb_strlen($countryCode);
$fromIndex = \mb_strpos($normalizedCandidate, $countryCode) + \mb_strlen($countryCode);
}
// Check each group of consecutive digits are not broken into separate groupings in the
// $normalizedCandidate string.
$formattedNumberGroupsLength = count($formattedNumberGroups);
$formattedNumberGroupsLength = \count($formattedNumberGroups);
for ($i = 0; $i < $formattedNumberGroupsLength; $i++) {
// Fails if the substring of $normalizedCandidate starting from $fromIndex
// doesn't contain the consecutive digits in $formattedNumberGroups[$i].
$fromIndex = mb_strpos($normalizedCandidate, $formattedNumberGroups[$i], $fromIndex);
$fromIndex = \mb_strpos($normalizedCandidate, $formattedNumberGroups[$i], $fromIndex);
if ($fromIndex === false) {
return false;
}
// Moves $fromIndex forward.
$fromIndex += mb_strlen($formattedNumberGroups[$i]);
if ($i === 0 && $fromIndex < mb_strlen($normalizedCandidate)) {
$fromIndex += \mb_strlen($formattedNumberGroups[$i]);
if ($i === 0 && $fromIndex < \mb_strlen($normalizedCandidate)) {
// We are at the position right after the NDC. We get the region used for formatting
// information based on the country code in the phone number, rather than the number itself,
// as we do not need to distinguish between different countries with the same country
@@ -544,15 +545,15 @@ class PhoneNumberMatcher implements \Iterator
$region = $util->getRegionCodeForCountryCode($number->getCountryCode());
if ($util->getNddPrefixForRegion($region, true) !== null
&& is_int(mb_substr($normalizedCandidate, $fromIndex, 1))
&& \is_int(\mb_substr($normalizedCandidate, $fromIndex, 1))
) {
// This means there is no formatting symbol after the NDC. In this case, we only
// accept the number if there is no formatting symbol at all in the number, except
// for extensions. This is only important for countries with national prefixes.
$nationalSignificantNumber = $util->getNationalSignificantNumber($number);
return mb_substr(
mb_substr($normalizedCandidate, $fromIndex - mb_strlen($formattedNumberGroups[$i])),
mb_strlen($nationalSignificantNumber)
return \mb_substr(
\mb_substr($normalizedCandidate, $fromIndex - \mb_strlen($formattedNumberGroups[$i])),
\mb_strlen($nationalSignificantNumber)
) === $nationalSignificantNumber;
}
}
@@ -562,7 +563,7 @@ class PhoneNumberMatcher implements \Iterator
// formatting in-between digits
if ($number->hasExtension()) {
return mb_strpos(mb_substr($normalizedCandidate, $fromIndex), $number->getExtension()) !== false;
return \mb_strpos(\mb_substr($normalizedCandidate, $fromIndex), $number->getExtension()) !== false;
}
return true;
@@ -581,24 +582,26 @@ class PhoneNumberMatcher implements \Iterator
$normalizedCandidate,
$formattedNumberGroups
) {
$candidateGroups = preg_split(PhoneNumberUtil::NON_DIGITS_PATTERN, $normalizedCandidate);
$candidateGroups = \preg_split(PhoneNumberUtil::NON_DIGITS_PATTERN, $normalizedCandidate);
// Set this to the last group, skipping it if the number has an extension.
$candidateNumberGroupIndex = $number->hasExtension() ? count($candidateGroups) - 2 : count($candidateGroups) - 1;
$candidateNumberGroupIndex = $number->hasExtension() ? \count($candidateGroups) - 2 : \count($candidateGroups) - 1;
// First we check if the national significant number is formatted as a block.
// We use contains and not equals, since the national significant number may be present with
// a prefix such as a national number prefix, or the country code itself.
if (count($candidateGroups) == 1
|| mb_strpos($candidateGroups[$candidateNumberGroupIndex],
$util->getNationalSignificantNumber($number)) !== false
if (\count($candidateGroups) == 1
|| \mb_strpos(
$candidateGroups[$candidateNumberGroupIndex],
$util->getNationalSignificantNumber($number)
) !== false
) {
return true;
}
// Starting from the end, go through in reverse, excluding the first group, and check the
// candidate and number groups are the same.
for ($formattedNumberGroupIndex = (count($formattedNumberGroups) - 1);
for ($formattedNumberGroupIndex = (\count($formattedNumberGroups) - 1);
$formattedNumberGroupIndex > 0 && $candidateNumberGroupIndex >= 0;
$formattedNumberGroupIndex--, $candidateNumberGroupIndex--) {
if ($candidateGroups[$candidateNumberGroupIndex] != $formattedNumberGroups[$formattedNumberGroupIndex]) {
@@ -609,8 +612,10 @@ class PhoneNumberMatcher implements \Iterator
// Now check the first group. There may be a national prefix at the start, so we only check
// that the candidate group ends with the formatted number group.
return ($candidateNumberGroupIndex >= 0
&& mb_substr($candidateGroups[$candidateNumberGroupIndex],
-mb_strlen($formattedNumberGroups[0])) == $formattedNumberGroups[0]);
&& \mb_substr(
$candidateGroups[$candidateNumberGroupIndex],
-\mb_strlen($formattedNumberGroups[0])
) == $formattedNumberGroups[0]);
}
/**
@@ -632,20 +637,23 @@ class PhoneNumberMatcher implements \Iterator
$rfc3966Format = $util->format($number, PhoneNumberFormat::RFC3966);
// We remove the extension part from the formatted string before splitting it into different
// groups.
$endIndex = mb_strpos($rfc3966Format, ';');
$endIndex = \mb_strpos($rfc3966Format, ';');
if ($endIndex === false) {
$endIndex = mb_strlen($rfc3966Format);
$endIndex = \mb_strlen($rfc3966Format);
}
// The country-code will have a '-' following it.
$startIndex = mb_strpos($rfc3966Format, '-') + 1;
return explode('-', mb_substr($rfc3966Format, $startIndex, $endIndex - $startIndex));
$startIndex = \mb_strpos($rfc3966Format, '-') + 1;
return \explode('-', \mb_substr($rfc3966Format, $startIndex, $endIndex - $startIndex));
}
// We format the NSN only, and split that according to the separator.
// If a format is provided, we format the NSN only, and split that according to the separator.
$nationalSignificantNumber = $util->getNationalSignificantNumber($number);
return explode('-', $util->formatNsnUsingPattern($nationalSignificantNumber, $formattingPattern,
PhoneNumberFormat::RFC3966));
return \explode('-', $util->formatNsnUsingPattern(
$nationalSignificantNumber,
$formattingPattern,
PhoneNumberFormat::RFC3966
));
}
/**
@@ -661,19 +669,29 @@ class PhoneNumberMatcher implements \Iterator
PhoneNumberUtil $util,
\Closure $checker
) {
// TODO: Evaluate how this works for other locales (testing has been limited to NANPA regions)
// and optimise if necessary.
$normalizedCandidate = PhoneNumberUtil::normalizeDigits($candidate, true /* keep non-digits */);
$formattedNumberGroups = static::getNationalNumberGroups($util, $number, null);
$formattedNumberGroups = static::getNationalNumberGroups($util, $number);
if ($checker($util, $number, $normalizedCandidate, $formattedNumberGroups)) {
return true;
}
// If this didn't pass, see if there are any alternative formats, and try them instead.
// If this didn't pass, see if there are any alternative formats that match, and try them instead.
$alternateFormats = static::getAlternateFormatsForCountry($number->getCountryCode());
$nationalSignificantNumber = $util->getNationalSignificantNumber($number);
if ($alternateFormats !== null) {
foreach ($alternateFormats->numberFormats() as $alternateFormat) {
if ($alternateFormat->leadingDigitsPatternSize() > 0) {
// There is only one leading digits pattern for alternate formats.
$pattern = $alternateFormat->getLeadingDigitsPattern(0);
$nationalSignificantNumberMatcher = new Matcher($pattern, $nationalSignificantNumber);
if (!$nationalSignificantNumberMatcher->lookingAt()) {
// Leading digits don't match; try another one.
continue;
}
}
$formattedNumberGroups = static::getNationalNumberGroups($util, $number, $alternateFormat);
if ($checker($util, $number, $normalizedCandidate, $formattedNumberGroups)) {
return true;
@@ -690,14 +708,14 @@ class PhoneNumberMatcher implements \Iterator
*/
public static function containsMoreThanOneSlashInNationalNumber(PhoneNumber $number, $candidate)
{
$firstSlashInBodyIndex = mb_strpos($candidate, '/');
$firstSlashInBodyIndex = \mb_strpos($candidate, '/');
if ($firstSlashInBodyIndex === false) {
// No slashes, this is okay
return false;
}
// Now look for a second one.
$secondSlashInBodyIndex = mb_strpos($candidate, '/', $firstSlashInBodyIndex + 1);
$secondSlashInBodyIndex = \mb_strpos($candidate, '/', $firstSlashInBodyIndex + 1);
if ($secondSlashInBodyIndex === false) {
// Only one slash, this is okay
return false;
@@ -709,11 +727,11 @@ class PhoneNumberMatcher implements \Iterator
if ($candidateHasCountryCode
&& PhoneNumberUtil::normalizeDigitsOnly(
mb_substr($candidate, 0, $firstSlashInBodyIndex)
\mb_substr($candidate, 0, $firstSlashInBodyIndex)
) == $number->getCountryCode()
) {
// Any more slashes and this is illegal
return (mb_strpos(mb_substr($candidate, $secondSlashInBodyIndex + 1), '/') !== false);
return (\mb_strpos(\mb_substr($candidate, $secondSlashInBodyIndex + 1), '/') !== false);
}
return true;
@@ -732,22 +750,24 @@ class PhoneNumberMatcher implements \Iterator
// extension number. We assume a carrier code is more than 1 digit, so the first case has to
// have more than 1 consecutive 'x' or 'X', whereas the second case can only have exactly 1 'x'
// or 'X'. We ignore the character if it appears as the last character of the string.
$candidateLength = mb_strlen($candidate);
$candidateLength = \mb_strlen($candidate);
for ($index = 0; $index < $candidateLength - 1; $index++) {
$charAtIndex = mb_substr($candidate, $index, 1);
$charAtIndex = \mb_substr($candidate, $index, 1);
if ($charAtIndex == 'x' || $charAtIndex == 'X') {
$charAtNextIndex = mb_substr($candidate, $index + 1, 1);
$charAtNextIndex = \mb_substr($candidate, $index + 1, 1);
if ($charAtNextIndex == 'x' || $charAtNextIndex == 'X') {
// This is the carrier code case, in which the 'X's always precede the national
// significant number.
$index++;
if ($util->isNumberMatch($number, mb_substr($candidate, $index)) != MatchType::NSN_MATCH) {
if ($util->isNumberMatch($number, \mb_substr($candidate, $index)) != MatchType::NSN_MATCH) {
return false;
}
} elseif (!PhoneNumberUtil::normalizeDigitsOnly(mb_substr($candidate,
$index)) == $number->getExtension()
} elseif (!PhoneNumberUtil::normalizeDigitsOnly(\mb_substr(
$candidate,
$index
)) == $number->getExtension()
) {
// This is the extension sign case, in which the 'x' or 'X' should always precede the
// extension number
@@ -782,7 +802,7 @@ class PhoneNumberMatcher implements \Iterator
$formatRule = $util->chooseFormattingPatternForNumber($metadata->numberFormats(), $nationalNumber);
// To do this, we check that a national prefix formatting rule was present and that it wasn't
// just the first-group symbol ($1) with punctuation.
if (($formatRule !== null) && mb_strlen($formatRule->getNationalPrefixFormattingRule()) > 0) {
if (($formatRule !== null) && $formatRule->getNationalPrefixFormattingRule() !== '') {
if ($formatRule->getNationalPrefixOptionalWhenFormatting()) {
// The national-prefix is optional in these cases, so we don't need to check if it was
// present.
@@ -820,7 +840,7 @@ class PhoneNumberMatcher implements \Iterator
{
$countryCodeSet = AlternateFormatsCountryCodeSet::$alternateFormatsCountryCodeSet;
if (!in_array($countryCallingCode, $countryCodeSet)) {
if (!\in_array($countryCallingCode, $countryCodeSet)) {
return null;
}
@@ -839,7 +859,7 @@ class PhoneNumberMatcher implements \Iterator
{
$fileName = static::$alternateFormatsFilePrefix . '_' . $countryCallingCode . '.php';
if (!is_readable($fileName)) {
if (!\is_readable($fileName)) {
throw new \Exception('missing metadata: ' . $fileName);
}
@@ -856,6 +876,7 @@ class PhoneNumberMatcher implements \Iterator
* @link http://php.net/manual/en/iterator.current.php
* @return PhoneNumberMatch|null
*/
#[\ReturnTypeWillChange]
public function current()
{
return $this->lastMatch;
@@ -866,6 +887,7 @@ class PhoneNumberMatcher implements \Iterator
* @link http://php.net/manual/en/iterator.next.php
* @return void Any returned value is ignored.
*/
#[\ReturnTypeWillChange]
public function next()
{
$this->lastMatch = $this->find($this->searchIndex);
@@ -886,6 +908,7 @@ class PhoneNumberMatcher implements \Iterator
* @return mixed scalar on success, or null on failure.
* @since 5.0.0
*/
#[\ReturnTypeWillChange]
public function key()
{
return $this->searchIndex;
@@ -898,6 +921,7 @@ class PhoneNumberMatcher implements \Iterator
* Returns true on success or false on failure.
* @since 5.0.0
*/
#[\ReturnTypeWillChange]
public function valid()
{
return $this->state === 'READY';
@@ -909,6 +933,7 @@ class PhoneNumberMatcher implements \Iterator
* @return void Any returned value is ignored.
* @since 5.0.0
*/
#[\ReturnTypeWillChange]
public function rewind()
{
$this->searchIndex = 0;

View File

@@ -29,7 +29,7 @@ class PhoneNumberToTimeZonesMapper
protected function __construct($phonePrefixDataDirectory)
{
$this->prefixTimeZonesMap = static::loadPrefixTimeZonesMapFromFile(
dirname(__FILE__) . $phonePrefixDataDirectory . DIRECTORY_SEPARATOR . static::MAPPING_DATA_FILE_NAME
\dirname(__FILE__) . $phonePrefixDataDirectory . DIRECTORY_SEPARATOR . static::MAPPING_DATA_FILE_NAME
);
$this->phoneUtil = PhoneNumberUtil::getInstance();
@@ -38,7 +38,7 @@ class PhoneNumberToTimeZonesMapper
protected static function loadPrefixTimeZonesMapFromFile($path)
{
if (!is_readable($path)) {
if (!\is_readable($path)) {
throw new \InvalidArgumentException('Mapping file can not be found');
}
@@ -109,7 +109,7 @@ class PhoneNumberToTimeZonesMapper
protected function getCountryLevelTimeZonesforNumber(PhoneNumber $number)
{
$timezones = $this->prefixTimeZonesMap->lookupCountryLevelTimeZonesForNumber($number);
return (count($timezones) == 0) ? $this->unknownTimeZoneList : $timezones;
return (\count($timezones) == 0) ? $this->unknownTimeZoneList : $timezones;
}
/**
@@ -138,6 +138,6 @@ class PhoneNumberToTimeZonesMapper
protected function getTimeZonesForGeocodableNumber(PhoneNumber $number)
{
$timezones = $this->prefixTimeZonesMap->lookupTimeZonesForNumber($number);
return (count($timezones) == 0) ? $this->unknownTimeZoneList : $timezones;
return (\count($timezones) == 0) ? $this->unknownTimeZoneList : $timezones;
}
}

View File

@@ -17,7 +17,7 @@ use libphonenumber\Leniency\AbstractLeniency;
* http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
*
* @author Shaopeng Jia
* @see https://github.com/googlei18n/libphonenumber
* @see https://github.com/google/libphonenumber
*/
class PhoneNumberUtil
{
@@ -43,11 +43,6 @@ class PhoneNumberUtil
const UNKNOWN_REGION = 'ZZ';
const NANPA_COUNTRY_CODE = 1;
/*
* The prefix that needs to be inserted in front of a Colombian landline number when dialed from
* a mobile number in Colombia.
*/
const COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX = '3';
// The PLUS_SIGN signifies the international prefix.
const PLUS_SIGN = '+';
const PLUS_CHARS = '+';
@@ -91,7 +86,7 @@ class PhoneNumberUtil
// The FIRST_GROUP_PATTERN was originally set to $1 but there are some countries for which the
// first group is not used in the national pattern (e.g. Argentina) so the $1 group does not match
// correctly. Therefore, we use \d, so that the first group actually used in the pattern will be
// correctly. Therefore, we use \d, so that the first group actually used in the pattern will be
// matched.
const FIRST_GROUP_PATTERN = "(\\$\\d)";
// Constants used in the formatting rules to represent the national prefix, first group and
@@ -101,7 +96,7 @@ class PhoneNumberUtil
const CC_STRING = '$CC';
// A pattern that is used to determine if the national prefix formatting rule has the first group
// only, i.e., does not start with the national prefix. Note that the pattern explicitly allows
// only, i.e, does not start with the national prefix. Note that the pattern explicitly allows
// for unbalanced parentheses.
const FIRST_GROUP_ONLY_PREFIX_PATTERN = '\\(?\\$1\\)?';
public static $PLUS_CHARS_PATTERN;
@@ -120,6 +115,7 @@ class PhoneNumberUtil
/**
* Only upper-case variants of alpha characters are stored.
*
* @var array
*/
protected static $ALPHA_MAPPINGS = array(
@@ -155,6 +151,7 @@ class PhoneNumberUtil
* Map of country calling codes that use a mobile token before the area code. One example of when
* this is relevant is when determining the length of the national destination code, which should
* be the length of the area code plus the length of the mobile token.
*
* @var array
*/
protected static $MOBILE_TOKEN_MAPPINGS = array();
@@ -182,6 +179,7 @@ class PhoneNumberUtil
/**
* For performance reasons, amalgamate both into one map.
*
* @var array
*/
protected static $ALPHA_PHONE_MAPPINGS;
@@ -189,6 +187,7 @@ class PhoneNumberUtil
/**
* Separate map of all symbols that we wish to retain when formatting alpha numbers. This
* includes digits, ASCII letters and number grouping symbols such as "-" and " ".
*
* @var array
*/
protected static $ALL_PLUS_NUMBER_GROUPING_SYMBOLS;
@@ -196,6 +195,7 @@ class PhoneNumberUtil
/**
* Simple ASCII digits map used to populate ALPHA_PHONE_MAPPINGS and
* ALL_PLUS_NUMBER_GROUPING_SYMBOLS.
*
* @var array
*/
protected static $asciiDigitMappings = array(
@@ -215,6 +215,7 @@ class PhoneNumberUtil
* Regexp of all possible ways to write extensions, for use when parsing. This will be run as a
* case-insensitive regexp match. Wide character versions are also provided after each ASCII
* version.
*
* @var String
*/
protected static $EXTN_PATTERNS_FOR_PARSING;
@@ -243,6 +244,7 @@ class PhoneNumberUtil
* have alpha-characters and punctuation.
*
* Note VALID_PUNCTUATION starts with a -, so must be the first in the range.
*
* @var string
*/
protected static $VALID_PHONE_NUMBER;
@@ -294,11 +296,13 @@ class PhoneNumberUtil
/**
* The set of county calling codes that map to the non-geo entity region ("001").
*
* @var array
*/
protected $countryCodesForNonGeographicalRegion = array();
/**
* The set of regions the library supports.
*
* @var array
*/
protected $supportedRegions = array();
@@ -308,11 +312,13 @@ class PhoneNumberUtil
* by that country calling code. In the case of multiple regions sharing a calling code, such as
* the NANPA regions, the one indicated with "isMainCountryForCode" in the metadata should be
* first.
*
* @var array
*/
protected $countryCallingCodeToRegionCodeMap = array();
/**
* The set of regions that share country calling code 1.
*
* @var array
*/
protected $nanpaRegions = array();
@@ -338,7 +344,6 @@ class PhoneNumberUtil
$this->countryCallingCodeToRegionCodeMap = $countryCallingCodeToRegionCodeMap;
$this->init();
$this->matcherAPI = RegexBasedMatcher::create();
static::initCapturingExtnDigits();
static::initExtnPatterns();
static::initExtnPattern();
static::$PLUS_CHARS_PATTERN = '[' . static::PLUS_CHARS . ']+';
@@ -393,10 +398,10 @@ class PhoneNumberUtil
/**
* Gets a {@link PhoneNumberUtil} instance to carry out international phone number formatting,
* parsing, or validation. The instance is loaded with phone number metadata for a number of most
* parsing or validation. The instance is loaded with phone number metadata for a number of most
* commonly used regions.
*
* <p>The {@link PhoneNumberUtil} is implemented as a singleton. Therefore, calling getInstance
* <p>The {@link PhoneNumberUtil} is implemented as a singleton. Therefore calling getInstance
* multiple times will only result in one instance being created.
*
* @param string $baseFileLocation
@@ -454,53 +459,109 @@ class PhoneNumberUtil
$this->nanpaRegions = $this->countryCallingCodeToRegionCodeMap[static::NANPA_COUNTRY_CODE];
}
/**
* @internal
*/
public static function initCapturingExtnDigits()
{
static::$CAPTURING_EXTN_DIGITS = '(' . static::DIGITS . '{1,7})';
}
/**
* @internal
*/
public static function initExtnPatterns()
{
// One-character symbols that can be used to indicate an extension.
$singleExtnSymbolsForMatching = "x\xEF\xBD\x98#\xEF\xBC\x83~\xEF\xBD\x9E";
// For parsing, we are slightly more lenient in our interpretation than for matching. Here we
// allow "comma" and "semicolon" as possible extension indicators. When matching, these are
// hardly ever used to indicate this.
$singleExtnSymbolsForParsing = ',;' . $singleExtnSymbolsForMatching;
static::$EXTN_PATTERNS_FOR_PARSING = static::createExtnPattern($singleExtnSymbolsForParsing);
static::$EXTN_PATTERNS_FOR_MATCHING = static::createExtnPattern($singleExtnSymbolsForMatching);
static::$EXTN_PATTERNS_FOR_PARSING = static::createExtnPattern(true);
static::$EXTN_PATTERNS_FOR_MATCHING = static::createExtnPattern(false);
}
/**
* Helper initialiser method to create the regular-expression pattern to match extensions,
* allowing the one-char extension symbols provided by {@code singleExtnSymbols}.
* @param string $singleExtnSymbols
* Helper method for constructing regular expressions for parsing. Creates an expression that
* captures up to maxLength digits.
* @param int $maxLength
* @return string
*/
protected static function createExtnPattern($singleExtnSymbols)
private static function extnDigits($maxLength)
{
// There are three regular expressions here. The first covers RFC 3966 format, where the
// extension is added using ";ext=". The second more generic one starts with optional white
// space and ends with an optional full stop (.), followed by zero or more spaces/tabs/commas
// and then the numbers themselves. The other one covers the special case of American numbers
// where the extension is written with a hash at the end, such as "- 503#"
// Note that the only capturing groups should be around the digits that you want to capture as
// part of the extension, or else parsing will fail!
// Canonical-equivalence doesn't seem to be an option with Android java, so we allow two options
// for representing the accented o - the character itself, and one in the unicode decomposed
// form with the combining acute accent.
return (static::RFC3966_EXTN_PREFIX . static::$CAPTURING_EXTN_DIGITS . '|' . "[ \xC2\xA0\\t,]*" .
"(?:e?xt(?:ensi(?:o\xCC\x81?|\xC3\xB3))?n?|(?:\xEF\xBD\x85)?\xEF\xBD\x98\xEF\xBD\x94(?:\xEF\xBD\x8E)?|" .
'доб|' . '[' . $singleExtnSymbols . "]|int|\xEF\xBD\x89\xEF\xBD\x8E\xEF\xBD\x94|anexo)" .
"[:\\.\xEF\xBC\x8E]?[ \xC2\xA0\\t,-]*" . static::$CAPTURING_EXTN_DIGITS . "\\#?|" .
'[- ]+(' . static::DIGITS . "{1,5})\\#");
return '(' . self::DIGITS . '{1,' . $maxLength . '})';
}
/**
* Helper initialiser method to create the regular-expression pattern to match extensions.
* Note that there are currently six capturing groups for the extension itself. If this number is
* changed, MaybeStripExtension needs to be updated.
*
* @param boolean $forParsing
* @return string
*/
protected static function createExtnPattern($forParsing)
{
// We cap the maximum length of an extension based on the ambiguity of the way the extension is
// prefixed. As per ITU, the officially allowed length for extensions is actually 40, but we
// don't support this since we haven't seen real examples and this introduces many false
// interpretations as the extension labels are not standardized.
$extLimitAfterExplicitLabel = 20;
$extLimitAfterLikelyLabel = 15;
$extLimitAfterAmbiguousChar = 9;
$extLimitWhenNotSure = 6;
$possibleSeparatorsBetweenNumberAndExtLabel = "[ \xC2\xA0\\t,]*";
// Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.
$possibleCharsAfterExtLabel = "[:\\.\xEf\xBC\x8E]?[ \xC2\xA0\\t,-]*";
$optionalExtnSuffix = "#?";
// Here the extension is called out in more explicit way, i.e mentioning it obvious patterns
// like "ext.". Canonical-equivalence doesn't seem to be an option with Android java, so we
// allow two options for representing the accented o - the character itself, and one in the
// unicode decomposed form with the combining acute accent.
$explicitExtLabels = "(?:e?xt(?:ensi(?:o\xCC\x81?|\xC3\xB3))?n?|\xEF\xBD\x85?\xEF\xBD\x98\xEF\xBD\x94\xEF\xBD\x8E?|\xD0\xB4\xD0\xBE\xD0\xB1|anexo)";
// One-character symbols that can be used to indicate an extension, and less commonly used
// or more ambiguous extension labels.
$ambiguousExtLabels = "(?:[x\xEF\xBD\x98#\xEF\xBC\x83~\xEF\xBD\x9E]|int|\xEF\xBD\x89\xEF\xBD\x8E\xEF\xBD\x94)";
// When extension is not separated clearly.
$ambiguousSeparator = "[- ]+";
$rfcExtn = static::RFC3966_EXTN_PREFIX . static::extnDigits($extLimitAfterExplicitLabel);
$explicitExtn = $possibleSeparatorsBetweenNumberAndExtLabel . $explicitExtLabels
. $possibleCharsAfterExtLabel . static::extnDigits($extLimitAfterExplicitLabel)
. $optionalExtnSuffix;
$ambiguousExtn = $possibleSeparatorsBetweenNumberAndExtLabel . $ambiguousExtLabels
. $possibleCharsAfterExtLabel . static::extnDigits($extLimitAfterAmbiguousChar) . $optionalExtnSuffix;
$americanStyleExtnWithSuffix = $ambiguousSeparator . static::extnDigits($extLimitWhenNotSure) . "#";
// The first regular expression covers RFC 3966 format, where the extension is added using
// ";ext=". The second more generic where extension is mentioned with explicit labels like
// "ext:". In both the above cases we allow more numbers in extension than any other extension
// labels. The third one captures when single character extension labels or less commonly used
// labels are used. In such cases we capture fewer extension digits in order to reduce the
// chance of falsely interpreting two numbers beside each other as a number + extension. The
// fourth one covers the special case of American numbers where the extension is written with a
// hash at the end, such as "- 503#".
$extensionPattern =
$rfcExtn . "|"
. $explicitExtn . "|"
. $ambiguousExtn . "|"
. $americanStyleExtnWithSuffix;
// Additional pattern that is supported when parsing extensions, not when matching.
if ($forParsing) {
// This is same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching comma as
// extension label may have it.
$possibleSeparatorsNumberExtLabelNoComma = "[ \xC2\xA0\\t]*";
// ",," is commonly used for auto dialling the extension when connected. First comma is matched
// through possibleSeparatorsBetweenNumberAndExtLabel, so we do not repeat it here. Semi-colon
// works in Iphone and Android also to pop up a button with the extension number following.
$autoDiallingAndExtLabelsFound = "(?:,{2}|;)";
$autoDiallingExtn = $possibleSeparatorsNumberExtLabelNoComma
. $autoDiallingAndExtLabelsFound . $possibleCharsAfterExtLabel
. static::extnDigits($extLimitAfterLikelyLabel) . $optionalExtnSuffix;
$onlyCommasExtn = $possibleSeparatorsNumberExtLabelNoComma
. '(?:,)+' . $possibleCharsAfterExtLabel . static::extnDigits($extLimitAfterAmbiguousChar)
. $optionalExtnSuffix;
// Here the first pattern is exclusively for extension autodialling formats which are used
// when dialling and in this case we accept longer extensions. However, the second pattern
// is more liberal on the number of commas that acts as extension labels, so we have a strict
// cap on the number of digits in such extensions.
return $extensionPattern . "|"
. $autoDiallingExtn . "|"
. $onlyCommasExtn;
}
return $extensionPattern;
}
protected static function initExtnPattern()
@@ -510,7 +571,6 @@ class PhoneNumberUtil
protected static function initValidPhoneNumberPatterns()
{
static::initCapturingExtnDigits();
static::initExtnPatterns();
static::$MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' . static::DIGITS . ']{' . static::MIN_LENGTH_FOR_NSN . '}';
static::$VALID_PHONE_NUMBER = '[' . static::PLUS_CHARS . ']*(?:[' . static::VALID_PUNCTUATION . static::STAR_SIGN . ']*[' . static::DIGITS . ']){3,}[' . static::VALID_PUNCTUATION . static::STAR_SIGN . static::VALID_ALPHA . static::DIGITS . ']*';
@@ -530,7 +590,6 @@ class PhoneNumberUtil
protected static function initMobileTokenMappings()
{
static::$MOBILE_TOKEN_MAPPINGS = array();
static::$MOBILE_TOKEN_MAPPINGS['52'] = '1';
static::$MOBILE_TOKEN_MAPPINGS['54'] = '9';
}
@@ -553,6 +612,7 @@ class PhoneNumberUtil
/**
* Converts all alpha characters in a number to their respective digits on a keypad, but retains
* existing formatting.
*
* @param string $number
* @return string
*/
@@ -572,10 +632,10 @@ class PhoneNumberUtil
*
* @param string $number a string of characters representing a phone number
* @param array $normalizationReplacements a mapping of characters to what they should be replaced by in
* the normalized version of the phone number
* @param bool $removeNonMatches indicates whether characters that are not able to be replaced
* the normalized version of the phone number.
* @param bool $removeNonMatches indicates whether characters that are not able to be replaced.
* should be stripped from the number. If this is false, they will be left unchanged in the number.
* @return string the normalized string version of the phone number
* @return string the normalized string version of the phone number.
*/
protected static function normalizeHelper($number, array $normalizationReplacements, $removeNonMatches)
{
@@ -596,15 +656,18 @@ class PhoneNumberUtil
/**
* Helper function to check if the national prefix formatting rule has the first group only, i.e.,
* does not start with the national prefix.
*
* @param string $nationalPrefixFormattingRule
* @return bool
*/
public static function formattingRuleHasFirstGroupOnly($nationalPrefixFormattingRule)
{
$firstGroupOnlyPrefixPatternMatcher = new Matcher(static::FIRST_GROUP_ONLY_PREFIX_PATTERN,
$nationalPrefixFormattingRule);
$firstGroupOnlyPrefixPatternMatcher = new Matcher(
static::FIRST_GROUP_ONLY_PREFIX_PATTERN,
$nationalPrefixFormattingRule
);
return mb_strlen($nationalPrefixFormattingRule) === 0
return $nationalPrefixFormattingRule === ''
|| $firstGroupOnlyPrefixPatternMatcher->matches();
}
@@ -676,7 +739,7 @@ class PhoneNumberUtil
}
/**
* Returns the types we have metadata for based on the PhoneMetadata object passed in
* Returns the types we have metadata for based on the PhoneMetadata object passed in.
*
* @param PhoneMetadata $metadata
* @return array
@@ -772,6 +835,7 @@ class PhoneNumberUtil
* entities
* <li> some geographical numbers have no area codes.
* </ul>
*
* @param PhoneNumber $number PhoneNumber object for which clients want to know the length of the area code.
* @return int the length of area code of the PhoneNumber object passed in.
*/
@@ -809,8 +873,9 @@ class PhoneNumberUtil
/**
* Returns the metadata for the given region code or {@code null} if the region code is invalid
* or unknown.
*
* @param string $regionCode
* @return PhoneMetadata
* @return null|PhoneMetadata
*/
public function getMetadataForRegion($regionCode)
{
@@ -823,12 +888,13 @@ class PhoneNumberUtil
/**
* Helper function to check region code is not unknown or null.
*
* @param string $regionCode
* @return bool
*/
protected function isValidRegionCode($regionCode)
{
return $regionCode !== null && in_array($regionCode, $this->supportedRegions);
return $regionCode !== null && !is_numeric($regionCode) && in_array(strtoupper($regionCode), $this->supportedRegions);
}
/**
@@ -855,6 +921,8 @@ class PhoneNumberUtil
}
/**
* Returns the region code for a number from the list of region codes passing in.
*
* @param PhoneNumber $number
* @param array $regionCodes
* @return null|string
@@ -903,6 +971,8 @@ class PhoneNumberUtil
}
/**
* Returns the type of number passed in i.e Toll free, premium.
*
* @param string $nationalNumber
* @param PhoneMetadata $metadata
* @return int PhoneNumberType constant
@@ -1011,6 +1081,7 @@ class PhoneNumberUtil
/**
* Gets the type of a valid phone number.
*
* @param PhoneNumber $number the number the phone number that we want to know the type
* @return int PhoneNumberType the type of the phone number, or UNKNOWN if it is invalid
*/
@@ -1028,7 +1099,7 @@ class PhoneNumberUtil
/**
* @param int $countryCallingCode
* @param string $regionCode
* @return PhoneMetadata
* @return null|PhoneMetadata
*/
protected function getMetadataForRegionOrCallingCode($countryCallingCode, $regionCode)
{
@@ -1038,7 +1109,7 @@ class PhoneNumberUtil
/**
* @param int $countryCallingCode
* @return PhoneMetadata
* @return null|PhoneMetadata
*/
public function getMetadataForNonGeographicalRegion($countryCallingCode)
{
@@ -1053,7 +1124,13 @@ class PhoneNumberUtil
* so that clients could use it to split a national significant number into NDC and subscriber
* number. The NDC of a phone number is normally the first group of digit(s) right after the
* country calling code when the number is formatted in the international format, if there is a
* subscriber number part that follows. An example of how this could be used:
* subscriber number part that follows.
*
* follows.
*
* N.B.: similar to an area code, not all numbers have an NDC!
*
* An example of how this could be used:
*
* <code>
* $phoneUtil = PhoneNumberUtil::getInstance();
@@ -1074,7 +1151,7 @@ class PhoneNumberUtil
* {@link #getLengthOfGeographicalAreaCode}.
*
* @param PhoneNumber $number the PhoneNumber object for which clients want to know the length of the NDC.
* @return int the length of NDC of the PhoneNumber object passed in.
* @return int the length of NDC of the PhoneNumber object passed in, which could be zero
*/
public function getLengthOfNationalDestinationCode(PhoneNumber $number)
{
@@ -1137,7 +1214,7 @@ class PhoneNumberUtil
// TODO: Consider removing the 'if' above so that unparseable
// strings without raw input format to the empty string instead of "+00"
$rawInput = $number->getRawInput();
if (mb_strlen($rawInput) > 0) {
if ($rawInput !== '') {
return $rawInput;
}
}
@@ -1293,8 +1370,8 @@ class PhoneNumberUtil
$numberFormatRule = $formattingPattern->getFormat();
$m = new Matcher($formattingPattern->getPattern(), $nationalNumber);
if ($numberFormat === PhoneNumberFormat::NATIONAL &&
$carrierCode !== null && mb_strlen($carrierCode) > 0 &&
mb_strlen($formattingPattern->getDomesticCarrierCodeFormattingRule()) > 0
$carrierCode !== null && $carrierCode !== '' &&
$formattingPattern->getDomesticCarrierCodeFormattingRule() !== ''
) {
// Replace the $CC in the formatting rule with the desired carrier code.
$carrierCodeFormattingRule = $formattingPattern->getDomesticCarrierCodeFormattingRule();
@@ -1586,7 +1663,7 @@ class PhoneNumberUtil
// Attempt to parse extension first, since it doesn't require region-specific data and we want
// to have the non-normalised number here.
$extension = $this->maybeStripExtension($nationalNumber);
if (mb_strlen($extension) > 0) {
if ($extension !== '') {
$phoneNumber->setExtension($extension);
}
@@ -1662,7 +1739,7 @@ class PhoneNumberUtil
&& $validationResult !== ValidationResult::IS_POSSIBLE_LOCAL_ONLY
&& $validationResult !== ValidationResult::INVALID_LENGTH) {
$normalizedNationalNumber = $potentialNationalNumber;
if ($keepRawInput && mb_strlen($carrierCode) > 0) {
if ($keepRawInput && $carrierCode !== '') {
$phoneNumber->setPreferredDomesticCarrierCode($carrierCode);
}
}
@@ -1712,7 +1789,7 @@ class PhoneNumberUtil
$phoneNumber = new PhoneNumber();
$phoneNumber->setCountryCode($phoneNumberIn->getCountryCode());
$phoneNumber->setNationalNumber($phoneNumberIn->getNationalNumber());
if (mb_strlen($phoneNumberIn->getExtension()) > 0) {
if ($phoneNumberIn->getExtension() != '') {
$phoneNumber->setExtension($phoneNumberIn->getExtension());
}
if ($phoneNumberIn->isItalianLeadingZero()) {
@@ -1756,8 +1833,11 @@ class PhoneNumberUtil
$indexOfRfc3966Prefix = strpos($numberToParse, static::RFC3966_PREFIX);
$indexOfNationalNumber = ($indexOfRfc3966Prefix !== false) ? $indexOfRfc3966Prefix + strlen(static::RFC3966_PREFIX) : 0;
$nationalNumber .= substr($numberToParse, $indexOfNationalNumber,
$indexOfPhoneContext - $indexOfNationalNumber);
$nationalNumber .= substr(
$numberToParse,
$indexOfNationalNumber,
$indexOfPhoneContext - $indexOfNationalNumber
);
} else {
// Extract a possible number from the string passed in (this strips leading characters that
// could not be the start of a phone number.)
@@ -1832,7 +1912,7 @@ class PhoneNumberUtil
if (!$this->isValidRegionCode($defaultRegion)) {
// If the number is null or empty, we can't infer the region.
$plusCharsPatternMatcher = new Matcher(static::$PLUS_CHARS_PATTERN, $numberToParse);
if ($numberToParse === null || mb_strlen($numberToParse) == 0 || !$plusCharsPatternMatcher->lookingAt()) {
if ($numberToParse === null || $numberToParse === '' || !$plusCharsPatternMatcher->lookingAt()) {
return false;
}
}
@@ -1878,7 +1958,7 @@ class PhoneNumberUtil
$keepRawInput,
PhoneNumber $phoneNumber
) {
if (mb_strlen($number) == 0) {
if ($number === '') {
return 0;
}
$fullNumber = $number;
@@ -1966,7 +2046,7 @@ class PhoneNumberUtil
*/
public function maybeStripInternationalPrefixAndNormalize(&$number, $possibleIddPrefix)
{
if (mb_strlen($number) == 0) {
if ($number === '') {
return CountryCodeSource::FROM_DEFAULT_COUNTRY;
}
$matches = array();
@@ -2089,7 +2169,7 @@ class PhoneNumberUtil
*/
public function extractCountryCode($fullNumber, &$nationalNumber)
{
if ((mb_strlen($fullNumber) == 0) || ($fullNumber[0] == '0')) {
if (($fullNumber === '') || ($fullNumber[0] == '0')) {
// Country codes do not begin with a '0'.
return 0;
}
@@ -2117,7 +2197,7 @@ class PhoneNumberUtil
{
$numberLength = mb_strlen($number);
$possibleNationalPrefix = $metadata->getNationalPrefixForParsing();
if ($numberLength == 0 || $possibleNationalPrefix === null || mb_strlen($possibleNationalPrefix) == 0) {
if ($numberLength == 0 || $possibleNationalPrefix === null || $possibleNationalPrefix === '') {
// Early return for numbers of zero length.
return false;
}
@@ -2134,13 +2214,16 @@ class PhoneNumberUtil
$numOfGroups = $prefixMatcher->groupCount();
$transformRule = $metadata->getNationalPrefixTransformRule();
if ($transformRule === null
|| mb_strlen($transformRule) == 0
|| $transformRule === ''
|| $prefixMatcher->group($numOfGroups - 1) === null
) {
// If the original number was viable, and the resultant number is not, we return.
if ($isViableOriginalNumber &&
!$this->matcherAPI->matchNationalNumber(
substr($number, $prefixMatcher->end()), $generalDesc, false)) {
substr($number, $prefixMatcher->end()),
$generalDesc,
false
)) {
return false;
}
if ($carrierCode !== null && $numOfGroups > 0 && $prefixMatcher->group($numOfGroups) !== null) {
@@ -2175,7 +2258,7 @@ class PhoneNumberUtil
/**
* Convenience wrapper around isPossibleNumberForTypeWithReason. Instead of returning the reason
* reason for failure, this method returns true if the number is either a possible fully-qualified
* for failure, this method returns true if the number is either a possible fully-qualified
* number (containing the area code and country code), or if the number could be a possible local
* number (with a country code, but missing an area code). Local numbers are considered possible
* if they could be possibly dialled in this format: if the area code is needed for a call to
@@ -2227,9 +2310,11 @@ class PhoneNumberUtil
// Note that when adding the possible lengths from mobile, we have to again check they
// aren't empty since if they are this indicates they are the same as the general desc and
// should be obtained from there.
$possibleLengths = array_merge($possibleLengths,
$possibleLengths = array_merge(
$possibleLengths,
(count($mobileDesc->getPossibleLength()) === 0)
? $metadata->getGeneralDesc()->getPossibleLength() : $mobileDesc->getPossibleLength());
? $metadata->getGeneralDesc()->getPossibleLength() : $mobileDesc->getPossibleLength()
);
// The current list is sorted; we need to merge in the new list and re-sort (duplicates
// are okay). Sorting isn't so expensive because the lists are very small.
@@ -2348,33 +2433,19 @@ class PhoneNumberUtil
$regionCode = $this->getRegionCodeForCountryCode($countryCallingCode);
$numberType = $this->getNumberType($numberNoExt);
$isValidNumber = ($numberType !== PhoneNumberType::UNKNOWN);
if ($regionCallingFrom == $regionCode) {
$isFixedLineOrMobile = ($numberType == PhoneNumberType::FIXED_LINE) || ($numberType == PhoneNumberType::MOBILE) || ($numberType == PhoneNumberType::FIXED_LINE_OR_MOBILE);
if (strtoupper($regionCallingFrom) === $regionCode) {
$isFixedLineOrMobile = ($numberType == PhoneNumberType::FIXED_LINE || $numberType == PhoneNumberType::MOBILE || $numberType == PhoneNumberType::FIXED_LINE_OR_MOBILE);
// Carrier codes may be needed in some countries. We handle this here.
if ($regionCode == 'CO' && $numberType == PhoneNumberType::FIXED_LINE) {
$formattedNumber = $this->formatNationalNumberWithCarrierCode(
$numberNoExt,
static::COLOMBIA_MOBILE_TO_FIXED_LINE_PREFIX
);
} elseif ($regionCode == 'BR' && $isFixedLineOrMobile) {
if ($regionCode === 'BR' && $isFixedLineOrMobile) {
// Historically, we set this to an empty string when parsing with raw input if none was
// found in the input string. However, this doesn't result in a number we can dial. For this
// reason, we treat the empty string the same as if it isn't set at all.
$formattedNumber = mb_strlen($numberNoExt->getPreferredDomesticCarrierCode()) > 0
$formattedNumber = $numberNoExt->getPreferredDomesticCarrierCode() !== ''
? $this->formatNationalNumberWithPreferredCarrierCode($numberNoExt, '')
// Brazilian fixed line and mobile numbers need to be dialed with a carrier code when
// called within Brazil. Without that, most of the carriers won't connect the call.
// Because of that, we return an empty string here.
: '';
} elseif ($isValidNumber && $regionCode == 'HU') {
// The national format for HU numbers doesn't contain the national prefix, because that is
// how numbers are normally written down. However, the national prefix is obligatory when
// dialing from a mobile phone, except for short numbers. As a result, we add it back here
// if it is a valid regular length phone number.
$formattedNumber = $this->getNddPrefixForRegion(
$regionCode,
true /* strip non-digits */
) . ' ' . $this->format($numberNoExt, PhoneNumberFormat::NATIONAL);
} elseif ($countryCallingCode === static::NANPA_COUNTRY_CODE) {
// For NANPA countries, we output international format for numbers that can be dialed
// internationally, since that always works, except for numbers which might potentially be
@@ -2388,7 +2459,8 @@ class PhoneNumberUtil
} else {
$formattedNumber = $this->format($numberNoExt, PhoneNumberFormat::NATIONAL);
}
} elseif (($regionCode == static::REGION_CODE_FOR_NON_GEO_ENTITY ||
} elseif ((
$regionCode == static::REGION_CODE_FOR_NON_GEO_ENTITY ||
// MX fixed line and mobile numbers should always be formatted in international format,
// even when dialed within MX. For national format to work, a carrier code needs to be
// used, and the correct carrier code depends on if the caller and callee are from the
@@ -2401,7 +2473,7 @@ class PhoneNumberUtil
($regionCode === 'MX' || $regionCode === 'CL' || $regionCode === 'UZ')
&& $isFixedLineOrMobile
)
) && $this->canBeInternationallyDialled($numberNoExt)
) && $this->canBeInternationallyDialled($numberNoExt)
) {
$formattedNumber = $this->format($numberNoExt, PhoneNumberFormat::INTERNATIONAL);
} else {
@@ -2483,7 +2555,7 @@ class PhoneNumberUtil
// Historically, we set this to an empty string when parsing with raw input if none was
// found in the input string. However, this doesn't result in a number we can dial. For this
// reason, we treat the empty string the same as if it isn't set at all.
mb_strlen($number->getPreferredDomesticCarrierCode()) > 0
$number->getPreferredDomesticCarrierCode() != ''
? $number->getPreferredDomesticCarrierCode()
: $fallbackCarrierCode
);
@@ -2555,7 +2627,7 @@ class PhoneNumberUtil
$rawInput = $number->getRawInput();
// If there is no raw input, then we can't keep alpha characters because there aren't any.
// In this case, we return formatOutOfCountryCallingNumber.
if (mb_strlen($rawInput) == 0) {
if ($rawInput === null || $rawInput === '') {
return $this->formatOutOfCountryCallingNumber($number, $regionCallingFrom);
}
$countryCode = $number->getCountryCode();
@@ -2630,7 +2702,7 @@ class PhoneNumberUtil
PhoneNumberFormat::INTERNATIONAL,
$formattedNumber
);
if (mb_strlen($internationalPrefixForFormatting) > 0) {
if ($internationalPrefixForFormatting != '') {
$formattedNumber = $internationalPrefixForFormatting . ' ' . $countryCode . ' ' . $formattedNumber;
} else {
// Invalid region entered as country-calling-from (so no metadata was found for it) or the
@@ -2687,23 +2759,28 @@ class PhoneNumberUtil
return $this->format($number, PhoneNumberFormat::NATIONAL);
}
// Metadata cannot be null because we checked 'isValidRegionCode()' above.
/** @var PhoneMetadata $metadataForRegionCallingFrom */
$metadataForRegionCallingFrom = $this->getMetadataForRegion($regionCallingFrom);
$internationalPrefix = $metadataForRegionCallingFrom->getInternationalPrefix();
// For regions that have multiple international prefixes, the international format of the
// number is returned, unless there is a preferred international prefix.
// In general, if there is a preferred international prefix, use that. Otherwise, for regions
// that have multiple international prefixes, the international format of the number is
// returned since we would not know which one to use.
$internationalPrefixForFormatting = '';
$uniqueInternationalPrefixMatcher = new Matcher(static::SINGLE_INTERNATIONAL_PREFIX, $internationalPrefix);
if ($uniqueInternationalPrefixMatcher->matches()) {
$internationalPrefixForFormatting = $internationalPrefix;
} elseif ($metadataForRegionCallingFrom->hasPreferredInternationalPrefix()) {
if ($metadataForRegionCallingFrom->hasPreferredInternationalPrefix()) {
$internationalPrefixForFormatting = $metadataForRegionCallingFrom->getPreferredInternationalPrefix();
} else {
$uniqueInternationalPrefixMatcher = new Matcher(static::SINGLE_INTERNATIONAL_PREFIX, $internationalPrefix);
if ($uniqueInternationalPrefixMatcher->matches()) {
$internationalPrefixForFormatting = $internationalPrefix;
}
}
$regionCode = $this->getRegionCodeForCountryCode($countryCallingCode);
// Metadata cannot be null because the country calling code is valid.
/** @var PhoneMetadata $metadataForRegion */
$metadataForRegion = $this->getMetadataForRegionOrCallingCode($countryCallingCode, $regionCode);
$formattedNationalNumber = $this->formatNsn(
$nationalSignificantNumber,
@@ -2717,7 +2794,7 @@ class PhoneNumberUtil
PhoneNumberFormat::INTERNATIONAL,
$formattedNumber
);
if (mb_strlen($internationalPrefixForFormatting) > 0) {
if ($internationalPrefixForFormatting !== '') {
$formattedNumber = $internationalPrefixForFormatting . ' ' . $countryCallingCode . ' ' . $formattedNumber;
} else {
$this->prefixNumberWithCountryCallingCode(
@@ -2736,15 +2813,17 @@ class PhoneNumberUtil
*/
public function isNANPACountry($regionCode)
{
return in_array($regionCode, $this->nanpaRegions);
return in_array(strtoupper((string)$regionCode), $this->nanpaRegions);
}
/**
* Formats a phone number using the original phone number format that the number is parsed from.
* Formats a phone number using the original phone number format (e.g. INTERNATIONAL or NATIONAL)
* that the number is parsed from, provided that the number has been parsed with
* parseAndKeepRawInput. Otherwise the number will be formatted in NATIONAL format.
*
* The original format is embedded in the country_code_source field of the PhoneNumber object
* passed in. If such information is missing, the number will be formatted into the NATIONAL
* format by default. When we don't have a formatting pattern for the number, the method returns
* the raw inptu when it is available.
* passed in, which is only set when parsing keeps the raw input. When we don't have a formatting
* pattern for the number, the method falls back to returning the raw input.
*
* Note this method guarantees no digit will be inserted, removed or modified as a result of
* formatting.
@@ -2783,7 +2862,7 @@ class PhoneNumberUtil
// compare them easily.
$nationalPrefix = $this->getNddPrefixForRegion($regionCode, true /* strip non-digits */);
$nationalFormat = $this->format($number, PhoneNumberFormat::NATIONAL);
if ($nationalPrefix === null || mb_strlen($nationalPrefix) == 0) {
if ($nationalPrefix === null || $nationalPrefix === '') {
// If the region doesn't have a national prefix at all, we can safely return the national
// format without worrying about a national prefix being added.
$formattedNumber = $nationalFormat;
@@ -2824,7 +2903,7 @@ class PhoneNumberUtil
}
$candidateNationalPrefixRule = substr($candidateNationalPrefixRule, 0, $indexOfFirstGroup);
$candidateNationalPrefixRule = static::normalizeDigitsOnly($candidateNationalPrefixRule);
if (mb_strlen($candidateNationalPrefixRule) == 0) {
if ($candidateNationalPrefixRule === '') {
// National prefix not used when formatting this number.
$formattedNumber = $nationalFormat;
break;
@@ -2890,7 +2969,7 @@ class PhoneNumberUtil
}
$nationalPrefix = $metadata->getNationalPrefix();
// If no national prefix was found, we return null.
if (mb_strlen($nationalPrefix) == 0) {
if ($nationalPrefix == '') {
return null;
}
if ($stripNonDigits) {
@@ -3044,7 +3123,7 @@ class PhoneNumberUtil
// share a country calling code is contained by only one region for performance reasons. For
// example, for NANPA regions it will be contained in the metadata for US.
$regionCode = $this->getRegionCodeForCountryCode($countryCallingCode);
// Metadata cannot be null because the country calling code is valid
// Metadata cannot be null because the country calling code is valid.
$metadata = $this->getMetadataForRegionOrCallingCode($countryCallingCode, $regionCode);
$formattedNumber = '';
@@ -3060,12 +3139,15 @@ class PhoneNumberUtil
// appropriate national prefix.
$numFormatCopy->mergeFrom($formattingPattern);
$nationalPrefixFormattingRule = $formattingPattern->getNationalPrefixFormattingRule();
if (mb_strlen($nationalPrefixFormattingRule) > 0) {
if ($nationalPrefixFormattingRule !== '') {
$nationalPrefix = $metadata->getNationalPrefix();
if (mb_strlen($nationalPrefix) > 0) {
if ($nationalPrefix != '') {
// Replace $NP with national prefix and $FG with the first group ($1).
$nationalPrefixFormattingRule = str_replace(array(static::NP_STRING, static::FG_STRING),
array($nationalPrefix, '$1'), $nationalPrefixFormattingRule);
$nationalPrefixFormattingRule = str_replace(
array(static::NP_STRING, static::FG_STRING),
array($nationalPrefix, '$1'),
$nationalPrefixFormattingRule
);
$numFormatCopy->setNationalPrefixFormattingRule($nationalPrefixFormattingRule);
} else {
// We don't want to have a rule for how to format the national prefix if there isn't one.
@@ -3155,7 +3237,7 @@ class PhoneNumberUtil
*
* @param string|int $regionCodeOrType the region for which an example number is needed
* @param int $type the PhoneNumberType of number that is needed
* @return PhoneNumber a valid number for the specified region and type. Returns null when the metadata
* @return PhoneNumber|null a valid number for the specified region and type. Returns null when the metadata
* does not contain such information or if an invalid region or region 001 was entered.
* For 001 (representing non-geographical numbers), call
* {@link #getExampleNumberForNonGeoEntity} instead.
@@ -3176,7 +3258,7 @@ class PhoneNumberUtil
}
}
// If there wasn't an example number for a region, try the non-geographical entities
// If there wasn't an example number for a region, try the non-geographical entities.
foreach ($this->getSupportedGlobalNetworkCallingCodes() as $countryCallingCode) {
$desc = $this->getNumberDescByType($this->getMetadataForNonGeographicalRegion($countryCallingCode), $regionCodeOrType);
try {
@@ -3423,6 +3505,13 @@ class PhoneNumberUtil
$this->stringEndsWithString($secondNumberNationalNumber, $firstNumberNationalNumber);
}
/**
* Returns true if a string ends with a given substring, false otherwise.
*
* @param string $hayStack
* @param string $needle
* @return bool
*/
protected function stringEndsWithString($hayStack, $needle)
{
$revNeedle = strrev($needle);
@@ -3455,7 +3544,7 @@ class PhoneNumberUtil
*
* Convenience wrapper around {@link #isPossibleNumberWithReason}. Instead of returning the reason
* for failure, this method returns a boolean value.
* for failure, this method returns true if the number is either a possible fully-qualified number
* For failure, this method returns true if the number is either a possible fully-qualified number
* (containing the area code and country code), or if the number could be a possible local number
* (with a country code, but missing an area code). Local numbers are considered possible if they
* could be possibly dialled in this format: if the area code is needed for a call to connect, the
@@ -3479,7 +3568,7 @@ class PhoneNumberUtil
*/
public function isPossibleNumber($number, $regionDialingFrom = null)
{
if ($regionDialingFrom !== null && is_string($number)) {
if (is_string($number)) {
try {
return $this->isPossibleNumber($this->parse($number, $regionDialingFrom));
} catch (NumberParseException $e) {
@@ -3570,6 +3659,7 @@ class PhoneNumberUtil
* Attempts to extract a valid number from a phone number that is too long to be valid, and resets
* the PhoneNumber object passed in to that valid version. If no valid number could be extracted,
* the PhoneNumber object passed in will not be modified.
*
* @param PhoneNumber $number a PhoneNumber object which contains a number that is too long to be valid.
* @return boolean true if a valid phone number can be successfully extracted.
*/

View File

@@ -30,7 +30,7 @@ class RegexBasedMatcher implements MatcherAPIInterface
// We don't want to consider it a prefix match when matching non-empty input against an empty
// pattern
if (strlen($nationalNumberPattern) === 0) {
if (\strlen($nationalNumberPattern) === 0) {
return false;
}

View File

@@ -19,6 +19,7 @@ namespace libphonenumber;
/**
* Class containing string constants of region codes for easier testing.
* @internal
*/
class RegionCode
{
@@ -39,6 +40,7 @@ class RegionCode
const CH = 'CH';
const CL = 'CL';
const CN = 'CN';
const CO = 'CO';
const CS = 'CS';
const CX = 'CX';
const DE = 'DE';

View File

@@ -92,9 +92,13 @@ class ShortNumberInfo
*/
protected function regionDialingFromMatchesNumber(PhoneNumber $number, $regionDialingFrom)
{
if ($regionDialingFrom === null || $regionDialingFrom === '') {
return false;
}
$regionCodes = $this->getRegionCodesForCountryCode($number->getCountryCode());
return in_array($regionDialingFrom, $regionCodes);
return in_array(strtoupper($regionDialingFrom), $regionCodes);
}
public function getSupportedRegions()
@@ -130,6 +134,8 @@ class ShortNumberInfo
*/
public function getMetadataForRegion($regionCode)
{
$regionCode = strtoupper((string)$regionCode);
if (!in_array($regionCode, ShortNumbersRegionCodeSet::$shortNumbersRegionCodeSet)) {
return null;
}
@@ -246,8 +252,9 @@ class ShortNumberInfo
$normalizedNumber = PhoneNumberUtil::normalizeDigitsOnly($number);
$emergencyDesc = $metadata->getEmergency();
$allowPrefixMatchForRegion = ($allowPrefixMatch
&& !in_array($regionCode, static::$regionsWhereEmergencyNumbersMustBeExact)
$allowPrefixMatchForRegion = (
$allowPrefixMatch
&& !in_array(strtoupper($regionCode), static::$regionsWhereEmergencyNumbersMustBeExact)
);
return $this->matcherAPI->matchNationalNumber($normalizedNumber, $emergencyDesc, $allowPrefixMatchForRegion);

View File

@@ -218,45 +218,46 @@ class ShortNumbersRegionCodeSet {
198 => 'SN',
199 => 'SO',
200 => 'SR',
201 => 'ST',
202 => 'SV',
203 => 'SX',
204 => 'SY',
205 => 'SZ',
206 => 'TC',
207 => 'TD',
208 => 'TG',
209 => 'TH',
210 => 'TJ',
211 => 'TL',
212 => 'TM',
213 => 'TN',
214 => 'TO',
215 => 'TR',
216 => 'TT',
217 => 'TV',
218 => 'TW',
219 => 'TZ',
220 => 'UA',
221 => 'UG',
222 => 'US',
223 => 'UY',
224 => 'UZ',
225 => 'VA',
226 => 'VC',
227 => 'VE',
228 => 'VG',
229 => 'VI',
230 => 'VN',
231 => 'VU',
232 => 'WF',
233 => 'WS',
234 => 'XK',
235 => 'YE',
236 => 'YT',
237 => 'ZA',
238 => 'ZM',
239 => 'ZW',
201 => 'SS',
202 => 'ST',
203 => 'SV',
204 => 'SX',
205 => 'SY',
206 => 'SZ',
207 => 'TC',
208 => 'TD',
209 => 'TG',
210 => 'TH',
211 => 'TJ',
212 => 'TL',
213 => 'TM',
214 => 'TN',
215 => 'TO',
216 => 'TR',
217 => 'TT',
218 => 'TV',
219 => 'TW',
220 => 'TZ',
221 => 'UA',
222 => 'UG',
223 => 'US',
224 => 'UY',
225 => 'UZ',
226 => 'VA',
227 => 'VC',
228 => 'VE',
229 => 'VG',
230 => 'VI',
231 => 'VN',
232 => 'VU',
233 => 'WF',
234 => 'WS',
235 => 'XK',
236 => 'YE',
237 => 'YT',
238 => 'ZA',
239 => 'ZM',
240 => 'ZW',
);
}

View File

@@ -27,186 +27,216 @@ return array (
3 => 212,
4 => 213,
5 => 216,
6 => 220,
7 => 221,
8 => 222,
9 => 223,
10 => 224,
11 => 225,
12 => 226,
13 => 227,
14 => 228,
15 => 229,
16 => 230,
17 => 231,
18 => 232,
19 => 233,
20 => 234,
21 => 235,
22 => 236,
23 => 237,
24 => 238,
25 => 239,
26 => 240,
27 => 241,
28 => 242,
29 => 243,
30 => 244,
31 => 245,
32 => 248,
33 => 249,
34 => 250,
35 => 251,
36 => 252,
37 => 253,
38 => 254,
39 => 255,
40 => 256,
41 => 257,
42 => 258,
43 => 260,
44 => 261,
45 => 262,
46 => 263,
47 => 264,
48 => 265,
49 => 267,
50 => 268,
51 => 269,
52 => 27,
53 => 297,
54 => 298,
55 => 299,
56 => 30,
57 => 31,
58 => 32,
59 => 33,
60 => 34,
61 => 350,
62 => 351,
63 => 352,
64 => 353,
65 => 354,
66 => 355,
67 => 356,
68 => 357,
69 => 358,
70 => 359,
71 => 36,
72 => 370,
73 => 372,
74 => 373,
75 => 374,
76 => 375,
77 => 376,
78 => 380,
79 => 381,
80 => 382,
81 => 383,
82 => 385,
83 => 386,
84 => 387,
85 => 389,
86 => 39,
87 => 40,
88 => 41,
89 => 420,
90 => 421,
91 => 423,
92 => 43,
93 => 44,
94 => 45,
95 => 47,
96 => 48,
97 => 49,
98 => 502,
99 => 503,
100 => 505,
101 => 506,
102 => 507,
103 => 508,
104 => 509,
105 => 51,
106 => 53,
107 => 54,
108 => 55,
109 => 56,
110 => 57,
111 => 58,
112 => 590,
113 => 591,
114 => 592,
115 => 593,
116 => 594,
117 => 595,
118 => 596,
119 => 597,
120 => 598,
121 => 599,
122 => 60,
123 => 61,
124 => 62,
125 => 63,
126 => 64,
127 => 65,
128 => 66,
129 => 670,
130 => 673,
131 => 674,
132 => 675,
133 => 677,
134 => 678,
135 => 679,
136 => 680,
137 => 685,
138 => 686,
139 => 688,
140 => 689,
141 => 7,
142 => 84,
143 => 852,
144 => 853,
145 => 855,
146 => 856,
147 => 86,
148 => 880,
149 => 886,
150 => 90,
151 => 91,
152 => 92,
153 => 93,
154 => 94,
155 => 95,
156 => 960,
157 => 961,
158 => 962,
159 => 963,
160 => 964,
161 => 965,
162 => 966,
163 => 967,
164 => 968,
165 => 970,
166 => 971,
167 => 972,
168 => 973,
169 => 974,
170 => 975,
171 => 976,
172 => 977,
173 => 98,
174 => 992,
175 => 993,
176 => 994,
177 => 995,
178 => 996,
179 => 998,
6 => 218,
7 => 220,
8 => 221,
9 => 222,
10 => 223,
11 => 224,
12 => 225,
13 => 226,
14 => 227,
15 => 228,
16 => 229,
17 => 230,
18 => 231,
19 => 232,
20 => 233,
21 => 234,
22 => 235,
23 => 236,
24 => 237,
25 => 238,
26 => 239,
27 => 240,
28 => 241,
29 => 242,
30 => 243,
31 => 244,
32 => 245,
33 => 246,
34 => 247,
35 => 248,
36 => 249,
37 => 250,
38 => 251,
39 => 252,
40 => 253,
41 => 254,
42 => 255,
43 => 256,
44 => 257,
45 => 258,
46 => 260,
47 => 261,
48 => 262,
49 => 263,
50 => 264,
51 => 265,
52 => 266,
53 => 267,
54 => 268,
55 => 269,
56 => 27,
57 => 290,
58 => 291,
59 => 297,
60 => 298,
61 => 299,
62 => 30,
63 => 31,
64 => 32,
65 => 33,
66 => 34,
67 => 350,
68 => 351,
69 => 352,
70 => 353,
71 => 354,
72 => 355,
73 => 356,
74 => 357,
75 => 358,
76 => 359,
77 => 36,
78 => 370,
79 => 371,
80 => 372,
81 => 373,
82 => 374,
83 => 375,
84 => 376,
85 => 377,
86 => 378,
87 => 380,
88 => 381,
89 => 382,
90 => 383,
91 => 385,
92 => 386,
93 => 387,
94 => 389,
95 => 39,
96 => 40,
97 => 41,
98 => 420,
99 => 421,
100 => 423,
101 => 43,
102 => 44,
103 => 45,
104 => 46,
105 => 47,
106 => 48,
107 => 49,
108 => 500,
109 => 501,
110 => 502,
111 => 503,
112 => 504,
113 => 505,
114 => 506,
115 => 507,
116 => 508,
117 => 509,
118 => 51,
119 => 53,
120 => 55,
121 => 56,
122 => 57,
123 => 58,
124 => 590,
125 => 591,
126 => 592,
127 => 593,
128 => 594,
129 => 595,
130 => 596,
131 => 597,
132 => 598,
133 => 599,
134 => 60,
135 => 61,
136 => 62,
137 => 63,
138 => 64,
139 => 65,
140 => 66,
141 => 670,
142 => 672,
143 => 673,
144 => 674,
145 => 675,
146 => 676,
147 => 677,
148 => 678,
149 => 679,
150 => 680,
151 => 681,
152 => 682,
153 => 683,
154 => 685,
155 => 686,
156 => 687,
157 => 688,
158 => 689,
159 => 690,
160 => 691,
161 => 692,
162 => 7,
163 => 81,
164 => 82,
165 => 84,
166 => 850,
167 => 852,
168 => 853,
169 => 855,
170 => 856,
171 => 86,
172 => 880,
173 => 881,
174 => 882,
175 => 886,
176 => 90,
177 => 91,
178 => 92,
179 => 93,
180 => 94,
181 => 95,
182 => 960,
183 => 961,
184 => 962,
185 => 963,
186 => 964,
187 => 965,
188 => 966,
189 => 967,
190 => 968,
191 => 970,
192 => 971,
193 => 972,
194 => 973,
195 => 974,
196 => 975,
197 => 976,
198 => 977,
199 => 98,
200 => 992,
201 => 993,
202 => 994,
203 => 995,
204 => 996,
205 => 998,
),
'fa' =>
array (
0 => 93,
1 => 98,
),
'ko' =>
array (
0 => 82,
),
'ru' =>
array (
0 => 374,

View File

@@ -12,6 +12,6 @@
return array (
9655 => 'فيفا',
9656 => 'الوطنية',
9656 => 'أوريدو',
9659 => 'زين',
);

View File

@@ -48,13 +48,28 @@ return array (
1246258 => 'Digicel',
1246259 => 'Digicel',
124626 => 'Digicel',
124628 => 'LIME',
124628 => 'Cable & Wireless',
124635 => 'LIME',
1246360 => 'LIME',
1246361 => 'LIME',
1246362 => 'LIME',
1246363 => 'LIME',
1246364 => 'LIME',
1246365 => 'LIME',
1246366 => 'LIME',
1246446 => 'Neptune Communications',
124645 => 'Sunbeach Communications',
12465211 => 'Digicel',
12465214 => 'LIME',
12465217 => 'KW Telecommunications',
1246522 => 'Ozone',
124669 => 'Ozone',
12468 => 'Digicel',
1264469 => 'Cable & Wireless',
126453 => 'Weblinks Limited',
126458 => 'Digicel',
12647 => 'Cable & Wireless',
1264729 => 'Cable & Wireless',
126477 => 'Cable & Wireless',
126871 => 'Digicel',
1268720 => 'Digicel',
1268721 => 'Digicel',
@@ -64,7 +79,10 @@ return array (
1268726 => 'Digicel',
1268727 => 'APUA',
1268729 => 'APUA',
126873 => 'Digicel',
1268730 => 'APUA',
1268732 => 'Digicel',
1268734 => 'Digicel',
1268736 => 'Digicel',
1268773 => 'APUA',
1268774 => 'APUA',
1268775 => 'APUA',
@@ -72,7 +90,9 @@ return array (
1268781 => 'APUA',
1268783 => 'Digicel',
1268785 => 'Digicel',
1268787 => 'Cable & Wireless',
1268788 => 'Digicel',
128424 => 'Cable & Wireless',
1284300 => 'Digicel',
128434 => 'Digicel',
128436 => 'Digicel',
@@ -84,12 +104,28 @@ return array (
12844968 => 'CCT',
12844969 => 'CCT',
1284499 => 'CCT',
13453 => 'Digicel',
1284546 => 'Cable & Wireless',
128456 => 'Cable & Wireless',
128459 => 'Cable & Wireless',
1340423 => 'Vitelcom Cellular',
134044 => 'GIGSKY Mobile',
1340725 => 'Vitelcom Cellular',
134532 => 'Digicel',
134542 => 'Digicel',
134551 => 'Digicel',
134552 => 'Digicel',
134554 => 'Digicel',
134555 => 'Digicel',
1345649 => 'Digicel',
134582 => 'Logic Communications',
1345919 => 'Cable & Wireless',
1345930 => 'LIME',
1345936 => 'Cable & Wireless',
1345937 => 'Cable & Wireless',
1345938 => 'Cable & Wireless',
1345939 => 'Cable & Wireless',
134599 => 'Cable & Wireless',
14412 => 'Cellular One',
14413 => 'Mobility',
144150 => 'Digicel Bermuda',
144151 => 'Digicel Bermuda',
@@ -97,16 +133,44 @@ return array (
144153 => 'Digicel Bermuda',
144159 => 'Digicel Bermuda',
14417 => 'Cellular One',
14418 => 'Cellular One',
14419 => 'Deltronics',
1473402 => 'Affordable Island Communications',
147341 => 'Digicel Grenada',
147342 => 'Digicel Grenada',
147352 => 'Affordable Island Communications',
147353 => 'AWS Grenada',
147390 => 'Affordable Island Communications',
16492 => 'C&W',
164923 => 'C&W',
164924 => 'Cable & Wireless',
16493 => 'Digicel',
164943 => 'Islandcom',
167148 => 'GTA',
1658295 => 'Cable & Wireless',
1659200 => 'Onvoy',
1659222 => 'Onvoy',
1659300 => 'Onvoy',
1659400 => 'Onvoy',
1659444 => 'Onvoy',
1659500 => 'Onvoy',
1659529 => 'Fractel',
1659600 => 'Onvoy',
1659666 => 'Onvoy',
1659766 => 'Fractel',
1659777 => 'Onvoy',
1659800 => 'Onvoy',
1659888 => 'Fractel',
1659900 => 'Onvoy',
1659999 => 'Onvoy',
166434 => 'Cable & Wireless',
166439 => 'Digicel',
1670284 => 'PTI PACIFICA',
1671480 => 'GTA',
1671482 => 'GTA',
1671483 => 'GTA',
1671486 => 'GTA',
1671487 => 'GTA',
1671488 => 'GTA',
1671489 => 'GTA',
167174 => 'PTI PACIFICA',
167183 => 'i CAN_GSM',
167184 => 'i CAN_GSM',
@@ -116,9 +180,11 @@ return array (
167187 => 'Choice Phone',
167188 => 'Choice Phone',
167189 => 'Choice Phone',
16842 => 'Blue Sky',
168424 => 'ASTCA',
168425 => 'Blue Sky',
168427 => 'Blue Sky',
16847 => 'ASTCA',
17582 => 'Cable & Wireless',
175828 => 'Cable & Wireless',
17583 => 'Cable & Wireless',
1758460 => 'Cable & Wireless',
1758461 => 'Cable & Wireless',
@@ -131,7 +197,10 @@ return array (
175851 => 'Digicel',
175852 => 'Digicel',
175858 => 'Cable & Wireless',
17587 => 'Digicel',
175871 => 'Digicel',
175872 => 'Digicel',
175873 => 'Digicel',
17588 => 'Digicel',
176722 => 'Cable & Wireless',
176723 => 'Cable & Wireless',
176724 => 'Cable & Wireless',
@@ -141,6 +210,9 @@ return array (
176729 => 'Cable & Wireless',
17673 => 'Digicel',
17676 => 'Digicel',
1767704 => 'Digicel',
1767705 => 'Digicel',
1767706 => 'Digicel',
1784430 => 'AT&T',
1784431 => 'AT&T',
1784432 => 'AT&T',
@@ -158,6 +230,7 @@ return array (
1784495 => 'Cable & Wireless',
178452 => 'Digicel',
178453 => 'Digicel',
178472 => 'Digicel',
1787203 => 'Claro',
1787210 => 'SunCom Wireless Puerto Rico',
1787212 => 'Claro',
@@ -413,16 +486,27 @@ return array (
180997 => 'Orange',
180998 => 'Orange',
180999 => 'Tricom',
186826 => 'bmobile',
186825 => 'Digicel',
186826 => 'Digicel',
1868266 => 'bmobile',
1868267 => 'bmobile',
1868268 => 'bmobile',
1868269 => 'bmobile',
186827 => 'bmobile',
186828 => 'bmobile',
186829 => 'bmobile',
18683 => 'Digicel',
18684 => 'bmobile',
18686 => 'bmobile',
186843 => 'Digicel',
186846 => 'bmobile',
186847 => 'bmobile',
186848 => 'bmobile',
186849 => 'bmobile',
1868620 => 'bmobile',
1868678 => 'bmobile',
186868 => 'bmobile',
18687 => 'bmobile',
186948 => 'Cable & Wireless',
186955 => 'CariGlobe St. Kitts',
186956 => 'The Cable St. Kitts',
1869660 => 'Cable & Wireless',
1869661 => 'Cable & Wireless',
1869662 => 'Cable & Wireless',
@@ -438,6 +522,10 @@ return array (
1869764 => 'Digicel',
1869765 => 'Digicel',
1869766 => 'Digicel',
187620 => 'Cable & Wireless',
1876210 => 'Cable & Wireless',
187622 => 'Cable & Wireless',
187623 => 'Cable & Wireless',
187624 => 'Digicel',
187625 => 'Digicel',
187626 => 'Digicel',
@@ -449,6 +537,18 @@ return array (
187628 => 'Digicel',
187629 => 'Digicel',
187630 => 'Digicel',
1876310 => 'Cable & Wireless',
1876312 => 'Cable & Wireless',
1876313 => 'Cable & Wireless',
1876314 => 'Cable & Wireless',
1876315 => 'Cable & Wireless',
1876316 => 'Cable & Wireless',
1876317 => 'Cable & Wireless',
1876318 => 'Cable & Wireless',
1876319 => 'Cable & Wireless',
187632 => 'Cable & Wireless',
187633 => 'Cable & Wireless',
187634 => 'Cable & Wireless',
187635 => 'Digicel',
187636 => 'Digicel',
187637 => 'Digicel',
@@ -472,14 +572,16 @@ return array (
187647 => 'Digicel',
187648 => 'Digicel',
187649 => 'Digicel',
1876503 => 'Digicel',
1876504 => 'Digicel',
1876505 => 'Digicel',
1876506 => 'Digicel',
1876507 => 'Digicel',
1876508 => 'Digicel',
1876509 => 'Digicel',
187650 => 'Digicel',
1876501 => 'Cable & Wireless',
1876502 => 'C&W',
187651 => 'C&W',
1876515 => 'Cable & Wireless',
1876517 => 'Cable & Wireless',
1876519 => 'Cable & Wireless',
187652 => 'Digicel',
187653 => 'Cable & Wireless',
187654 => 'Cable & Wireless',
1876550 => 'Digicel',
1876551 => 'Digicel',
1876552 => 'Digicel',
@@ -489,24 +591,57 @@ return array (
1876557 => 'Digicel',
1876558 => 'Digicel',
1876559 => 'Digicel',
1876560 => 'Digicel',
1876561 => 'Digicel',
1876562 => 'Digicel',
1876564 => 'Digicel',
1876565 => 'Digicel',
1876566 => 'Digicel',
1876567 => 'Digicel',
1876568 => 'Digicel',
1876569 => 'Digicel',
187656 => 'Digicel',
1876563 => 'C&W',
187657 => 'Digicel',
187658 => 'Digicel',
187659 => 'Digicel',
1876648 => 'Digicel',
1876649 => 'Digicel',
1876666 => 'Digicel',
1876667 => 'Digicel',
1876700 => 'Cable & Wireless',
1876707 => 'Cable & Wireless',
187677 => 'Cable & Wireless',
1876781 => 'Cable & Wireless',
1876782 => 'Cable & Wireless',
1876783 => 'Cable & Wireless',
1876784 => 'Cable & Wireless',
1876787 => 'Cable & Wireless',
1876788 => 'Cable & Wireless',
1876789 => 'Cable & Wireless',
1876790 => 'Cable & Wireless',
1876791 => 'Cable & Wireless',
1876792 => 'Cable & Wireless',
1876793 => 'Cable & Wireless',
1876796 => 'Cable & Wireless',
1876797 => 'Cable & Wireless',
1876798 => 'Cable & Wireless',
1876799 => 'Cable & Wireless',
187680 => 'Cable & Wireless',
1876810 => 'Cable & Wireless',
1876812 => 'Cable & Wireless',
1876813 => 'Cable & Wireless',
1876814 => 'Cable & Wireless',
1876815 => 'Cable & Wireless',
1876816 => 'Cable & Wireless',
1876817 => 'Cable & Wireless',
1876818 => 'Cable & Wireless',
1876819 => 'Cable & Wireless',
187682 => 'Cable & Wireless',
187683 => 'Cable & Wireless',
187684 => 'Digicel',
187685 => 'Digicel',
187686 => 'Digicel',
187687 => 'Digicel',
187688 => 'Digicel',
187689 => 'Digicel',
1876909 => 'Cable & Wireless',
1876919 => 'Cable & Wireless',
1876990 => 'Cable & Wireless',
1876995 => 'Cable & Wireless',
1876997 => 'Cable & Wireless',
1876999 => 'Cable & Wireless',
1939201 => 'CENTENNIAL',
1939212 => 'CENTENNIAL',
1939214 => 'CENTENNIAL',

View File

@@ -11,8 +11,11 @@
*/
return array (
21112 => 'Sudatel Group',
21191 => 'Zain',
21192 => 'MTN',
21195 => 'Vivacell',
21195 => 'Network of the World',
21197 => 'Gemtel',
21198 => 'Digitel',
21199 => 'MTN',
);

View File

@@ -83,6 +83,9 @@ return array (
212698 => 'Inwi',
212699 => 'Inwi',
21270 => 'Inwi',
21271 => 'Inwi',
21272 => 'Inwi',
21276 => 'Maroc Telecom',
21277 => 'Méditel',
21278 => 'Méditel',
);

View File

@@ -13,6 +13,5 @@
return array (
2135 => 'Ooredoo',
2136 => 'Mobilis',
21377 => 'Djezzy',
21379 => 'Djezzy',
2137 => 'Djezzy',
);

View File

@@ -19,6 +19,7 @@ return array (
21644 => 'Tunisie Telecom',
21645 => 'Watany Ettisalat',
21646 => 'Ooredoo',
21647 => 'Tunisie Telecom',
2165 => 'Orange',
2169 => 'Tunisie Telecom',
);

View File

@@ -0,0 +1,20 @@
<?php
/**
* This file has been @generated by a phing task by {@link GeneratePhonePrefixData}.
* See [README.md](README.md#generating-data) for more information.
*
* Pull requests changing data in these files will not be accepted. See the
* [FAQ in the README](README.md#problems-with-invalid-numbers] on how to make
* metadata changes.
*
* Do not modify this file directly!
*/
return array (
21891 => 'Al-Madar',
21892 => 'Libyana',
21893 => 'Al-Madar',
21894 => 'Libyana',
21895 => 'Libya Telecom & Technology',
21896 => 'Libya Telecom & Technology',
);

View File

@@ -13,6 +13,12 @@
return array (
2202 => 'Africell',
2203 => 'QCell',
22050 => 'QCell',
22051 => 'QCell',
22052 => 'QCell',
22053 => 'QCell',
22058 => 'QCell',
22059 => 'QCell',
2206 => 'Comium',
2207 => 'Africell',
2209 => 'Gamcel',

View File

@@ -13,6 +13,8 @@
return array (
22170 => 'Expresso',
22172 => 'HAYO',
22175 => 'Promobile',
221757 => 'Origines',
22176 => 'Tigo',
22177 => 'Orange',
22178 => 'Orange',

View File

@@ -11,7 +11,31 @@
*/
return array (
2222 => 'Chinguitel',
2223 => 'Mattel',
2224 => 'Mauritel',
22220 => 'Chinguitel',
22221 => 'Chinguitel',
22222 => 'Chinguitel',
22223 => 'Chinguitel',
22224 => 'Chinguitel',
22226 => 'Chinguitel',
22227 => 'Chinguitel',
22228 => 'Chinguitel',
22229 => 'Chinguitel',
22230 => 'Mattel',
22231 => 'Mattel',
22232 => 'Mattel',
22233 => 'Mattel',
22234 => 'Mattel',
22236 => 'Mattel',
22237 => 'Mattel',
22238 => 'Mattel',
22239 => 'Mattel',
22240 => 'Mauritel',
22241 => 'Mauritel',
22242 => 'Mauritel',
22243 => 'Mauritel',
22244 => 'Mauritel',
22246 => 'Mauritel',
22247 => 'Mauritel',
22248 => 'Mauritel',
22249 => 'Mauritel',
);

View File

@@ -11,6 +11,7 @@
*/
return array (
223200 => 'Orange',
2232079 => 'Sotelma',
223217 => 'Sotelma',
2235 => 'Atel',
@@ -18,6 +19,7 @@ return array (
2237 => 'Orange',
22382 => 'Orange',
22383 => 'Orange',
22384 => 'Orange',
22389 => 'Sotelma',
22390 => 'Orange',
22391 => 'Orange',

View File

@@ -12,6 +12,7 @@
return array (
22460 => 'Sotelgui',
22461 => 'Orange',
22462 => 'Orange',
22463 => 'Intercel',
22465 => 'Cellcom',

View File

@@ -12,55 +12,6 @@
return array (
22501 => 'Moov',
22502 => 'Moov',
22503 => 'Moov',
22504 => 'MTN',
22505 => 'MTN',
22506 => 'MTN',
22507 => 'Orange',
22508 => 'Orange',
22509 => 'Orange',
22540 => 'Moov',
22541 => 'Moov',
22542 => 'Moov',
22543 => 'Moov',
22544 => 'MTN',
22545 => 'MTN',
22546 => 'MTN',
22547 => 'Orange',
22548 => 'Orange',
22549 => 'Orange',
22550 => 'Moov',
22551 => 'Moov',
22552 => 'Moov',
22553 => 'Moov',
22554 => 'MTN',
22555 => 'MTN',
22556 => 'MTN',
22557 => 'Orange',
22558 => 'Orange',
22559 => 'Orange',
22560 => 'GreenN',
22561 => 'GreenN',
22564 => 'MTN',
22565 => 'MTN',
22566 => 'MTN',
22567 => 'Orange',
22568 => 'Orange',
22569 => 'Aircom',
22571 => 'Moov',
22572 => 'Moov',
22573 => 'Moov',
22574 => 'MTN',
22575 => 'MTN',
22576 => 'MTN',
22577 => 'Orange',
22578 => 'Orange',
22579 => 'Orange',
22584 => 'MTN',
22585 => 'MTN',
22586 => 'MTN',
22587 => 'Orange',
22588 => 'Orange',
22589 => 'Orange',
);

View File

@@ -11,31 +11,38 @@
*/
return array (
22651 => 'Telmob',
22652 => 'Telmob',
22601 => 'Onatel',
22602 => 'Onatel',
22603 => 'Onatel',
22605 => 'Orange',
22606 => 'Orange',
22607 => 'Orange',
22651 => 'Onatel',
22652 => 'Onatel',
22653 => 'Onatel',
22654 => 'Orange',
22655 => 'Airtel',
22656 => 'Airtel',
22655 => 'Orange',
22656 => 'Orange',
22657 => 'Orange',
22658 => 'Telecel Faso',
22660 => 'Telmob',
22661 => 'Telmob',
22662 => 'Telmob',
22663 => 'Telmob',
22664 => 'Airtel',
22665 => 'Airtel',
22666 => 'Airtel',
22667 => 'Airtel',
22660 => 'Onatel',
22661 => 'Onatel',
22662 => 'Onatel',
22663 => 'Onatel',
22664 => 'Orange',
22665 => 'Orange',
22666 => 'Orange',
22667 => 'Orange',
22668 => 'Telecel Faso',
22669 => 'Telecel Faso',
22670 => 'Telmob',
22671 => 'Telmob',
22672 => 'Telmob',
22673 => 'Telmob',
22674 => 'Airtel',
22675 => 'Airtel',
22676 => 'Airtel',
22677 => 'Airtel',
22670 => 'Onatel',
22671 => 'Onatel',
22672 => 'Onatel',
22673 => 'Onatel',
22674 => 'Orange',
22675 => 'Orange',
22676 => 'Orange',
22677 => 'Orange',
22678 => 'Telecel Faso',
22679 => 'Telecel Faso',
);

View File

@@ -11,12 +11,23 @@
*/
return array (
22723 => 'Orange',
22770 => 'Orange',
22774 => 'Moov',
22780 => 'Orange',
22781 => 'Orange',
22782 => 'Orange',
22783 => 'Niger Telecoms',
22784 => 'Moov',
22785 => 'Moov',
22786 => 'Airtel',
22787 => 'Airtel',
22788 => 'Airtel',
22789 => 'Airtel',
22790 => 'Orange',
22791 => 'Orange',
22792 => 'Orange',
22793 => 'Niger Telecoms',
22794 => 'Moov',
22795 => 'Moov',
22796 => 'Airtel',

View File

@@ -11,6 +11,10 @@
*/
return array (
2294 => 'SBIN',
2295 => 'MTN',
22955 => 'Moov',
22956 => 'Moov',
22960 => 'Moov',
22961 => 'MTN',
22962 => 'MTN',
@@ -21,10 +25,12 @@ return array (
22967 => 'MTN',
22968 => 'Moov',
22969 => 'MTN',
22990 => 'Libercom',
22990 => 'MTN',
22991 => 'MTN',
22993 => 'BLK',
22994 => 'Moov',
22995 => 'Moov',
22996 => 'MTN',
22997 => 'MTN',
22998 => 'Moov',
22999 => 'Moov',

View File

@@ -12,14 +12,14 @@
return array (
230525 => 'Cellplus',
230526 => 'Cellplus',
230527 => 'MTML',
230528 => 'MTML',
230529 => 'MTML',
230542 => 'Emtel',
230544 => 'Emtel',
230547 => 'Emtel',
23054 => 'Emtel',
2305471 => 'Cellplus',
230548 => 'Emtel',
230549 => 'Emtel',
23055 => 'Emtel',
230550 => 'Cellplus',
23057 => 'Cellplus',
230571 => 'Emtel',
230572 => 'Emtel',
@@ -37,6 +37,7 @@ return array (
2305876 => 'Cellplus',
2305877 => 'Cellplus',
2305878 => 'Cellplus',
230588 => 'MTML',
230589 => 'MTML',
230590 => 'Cellplus',
230591 => 'Cellplus',
@@ -47,4 +48,5 @@ return array (
230596 => 'MTML',
230597 => 'Emtel',
230598 => 'Emtel',
2307 => 'Emtel',
);

View File

@@ -11,9 +11,9 @@
*/
return array (
23120 => 'LIBTELCO',
231330 => 'West Africa Telecom',
231555 => 'Novafone',
2317 => 'Cellcom',
231555 => 'Lonestar Cell',
2316 => 'Lonestar Cell',
2317 => 'Orange',
2318 => 'Lonestar Cell',
);

View File

@@ -11,23 +11,16 @@
*/
return array (
23221 => 'Sierratel',
23225 => 'Sierratel',
23230 => 'Africell',
23231 => 'QCELL',
23233 => 'Comium',
23232 => 'QCELL',
23233 => 'Africell',
23234 => 'QCELL',
23235 => 'IPTEL',
23240 => 'Datatel/Cellcom',
23244 => 'Intergroup',
23250 => 'Datatel/Cellcom',
23255 => 'AFCOM',
2326 => 'Onlime',
23275 => 'Orange',
23276 => 'Airtel',
2327 => 'Orange',
23277 => 'Africell',
23278 => 'Airtel',
23279 => 'Airtel',
2328 => 'Africell',
2329 => 'Africell',
);

View File

@@ -12,19 +12,17 @@
return array (
23320 => 'Vodafone',
23323 => 'Globacom (Zain)',
23323 => 'airteltiGO',
23324 => 'MTN',
23326 => 'Airtel',
23327 => 'tiGO',
23325 => 'MTN',
23326 => 'airteltiGO',
23327 => 'airteltiGO',
23328 => 'Expresso',
23329 => 'National Security',
23350 => 'Vodafone',
23354 => 'MTN',
233553 => 'MTN',
233554 => 'MTN',
233555 => 'MTN',
233556 => 'MTN',
233557 => 'MTN',
233558 => 'MTN',
23356 => 'Airtel',
23357 => 'tiGO',
23355 => 'MTN',
23356 => 'airteltiGO',
23357 => 'airteltiGO',
23359 => 'MTN',
);

View File

@@ -11,168 +11,23 @@
*/
return array (
234173 => 'Starcomms',
234174 => 'Starcomms',
2341804 => 'Starcomms',
234181 => 'Starcomms',
234182 => 'Starcomms',
234184 => 'Starcomms',
234185 => 'Starcomms',
234187 => 'Starcomms',
2341880 => 'Starcomms',
2341881 => 'Starcomms',
2341882 => 'Starcomms',
2341883 => 'Starcomms',
234189 => 'Starcomms',
234195 => 'Starcomms',
2342870 => 'Starcomms',
2342871 => 'Starcomms',
2342872 => 'Starcomms',
2342873 => 'Starcomms',
2342874 => 'Starcomms',
2342875 => 'Starcomms',
2342876 => 'Starcomms',
2342877 => 'Starcomms',
2343181 => 'Starcomms',
2343182 => 'Starcomms',
2343183 => 'Starcomms',
2343184 => 'Starcomms',
2343185 => 'Starcomms',
2343186 => 'Starcomms',
2343187 => 'Starcomms',
2343188 => 'Starcomms',
2343880 => 'Starcomms',
2343881 => 'Starcomms',
2343882 => 'Starcomms',
2343883 => 'Starcomms',
2343884 => 'Starcomms',
2343885 => 'Starcomms',
2343886 => 'Starcomms',
2343887 => 'Starcomms',
2343961 => 'Starcomms',
2343962 => 'Starcomms',
2343963 => 'Starcomms',
2343964 => 'Starcomms',
2343965 => 'Starcomms',
2343985 => 'Starcomms',
2343986 => 'Starcomms',
2343987 => 'Starcomms',
2343988 => 'Starcomms',
2343989 => 'Starcomms',
2344280 => 'Starcomms',
2344281 => 'Starcomms',
2344282 => 'Starcomms',
2344671 => 'Starcomms',
2344672 => 'Starcomms',
2344673 => 'Starcomms',
2344674 => 'Starcomms',
2344675 => 'Starcomms',
2344676 => 'Starcomms',
2344677 => 'Starcomms',
2344678 => 'Starcomms',
2344679 => 'Starcomms',
2344680 => 'Starcomms',
2344682 => 'Starcomms',
2344683 => 'Starcomms',
2344684 => 'Starcomms',
2344687 => 'Starcomms',
2344880 => 'Starcomms',
2344881 => 'Starcomms',
2344882 => 'Starcomms',
2345277 => 'Starcomms',
2345278 => 'Starcomms',
2345279 => 'Starcomms',
234528 => 'Starcomms',
2345381 => 'Starcomms',
2345382 => 'Starcomms',
2345383 => 'Starcomms',
2345384 => 'Starcomms',
2345385 => 'Starcomms',
2345386 => 'Starcomms',
2345387 => 'Starcomms',
2345389 => 'Starcomms',
2345480 => 'Starcomms',
2345481 => 'Starcomms',
2345482 => 'Starcomms',
2345483 => 'Starcomms',
2345484 => 'Starcomms',
2345485 => 'Starcomms',
2345486 => 'Starcomms',
2345487 => 'Starcomms',
2345684 => 'Starcomms',
2345685 => 'Starcomms',
2345686 => 'Starcomms',
2345687 => 'Starcomms',
2346277 => 'Starcomms',
2346278 => 'Starcomms',
2346279 => 'Starcomms',
234628 => 'Starcomms',
2346437 => 'Starcomms',
2346438 => 'Starcomms',
2346439 => 'Starcomms',
2346461 => 'Starcomms',
2346462 => 'Starcomms',
2346469 => 'Starcomms',
2346470 => 'Starcomms',
2346474 => 'Starcomms',
2346475 => 'Starcomms',
2346476 => 'Starcomms',
2346479 => 'Starcomms',
2346481 => 'Starcomms',
2346482 => 'Starcomms',
2346489 => 'Starcomms',
2346491 => 'Starcomms',
2346492 => 'Starcomms',
2346493 => 'Starcomms',
2346494 => 'Starcomms',
2346495 => 'Starcomms',
2346496 => 'Starcomms',
2346497 => 'Starcomms',
2346498 => 'Starcomms',
2346580 => 'Starcomms',
2346581 => 'Starcomms',
2346582 => 'Starcomms',
2346987 => 'Starcomms',
2346988 => 'Starcomms',
2346989 => 'Starcomms',
234701 => 'Airtel',
2347020 => 'Smile',
2347021 => 'Ntel',
2347022 => 'Ntel',
2347023 => 'Zoom',
2347024 => 'Prestel',
2347025 => 'Visafone',
2347026 => 'Visafone',
2347025 => 'MTN',
2347026 => 'MTN',
2347027 => 'Multilinks',
2347028 => 'Starcomms',
2347029 => 'Starcomms',
234703 => 'MTN',
234704 => 'Visafone',
234704 => 'MTN',
234705 => 'Glo',
234706 => 'MTN',
234707 => 'Zoom',
234708 => 'Airtel',
234709 => 'Multilinks',
2347380 => 'Starcomms',
2347381 => 'Starcomms',
2347382 => 'Starcomms',
2347383 => 'Starcomms',
2347384 => 'Starcomms',
2347385 => 'Starcomms',
2347386 => 'Starcomms',
2347387 => 'Starcomms',
2347691 => 'Starcomms',
2347692 => 'Starcomms',
2347693 => 'Starcomms',
2347694 => 'Starcomms',
2347695 => 'Starcomms',
2347696 => 'Starcomms',
2347697 => 'Starcomms',
2347698 => 'Starcomms',
2347782 => 'Starcomms',
2347783 => 'Starcomms',
2347784 => 'Starcomms',
234801 => 'Megatech',
234801 => 'MAFAB',
234802 => 'Airtel',
234803 => 'MTN',
234804 => 'Ntel',
@@ -191,65 +46,18 @@ return array (
234817 => '9mobile',
234818 => '9mobile',
234819 => 'Starcomms',
2348283 => 'Starcomms',
2348284 => 'Starcomms',
2348285 => 'Starcomms',
2348286 => 'Starcomms',
2348287 => 'Starcomms',
2348288 => 'Starcomms',
2348380 => 'Starcomms',
2348381 => 'Starcomms',
2348382 => 'Starcomms',
2348421 => 'Starcomms',
2348422 => 'Starcomms',
2348431 => 'Starcomms',
2348434 => 'Starcomms',
2348437 => 'Starcomms',
2348438 => 'Starcomms',
2348439 => 'Starcomms',
2348453 => 'Starcomms',
2348454 => 'Starcomms',
2348456 => 'Starcomms',
2348474 => 'Starcomms',
2348475 => 'Starcomms',
2348476 => 'Starcomms',
2348477 => 'Starcomms',
2348478 => 'Starcomms',
2348479 => 'Starcomms',
2348480 => 'Starcomms',
2348481 => 'Starcomms',
2348484 => 'Starcomms',
2348485 => 'Starcomms',
2348486 => 'Starcomms',
2348488 => 'Starcomms',
2348489 => 'Starcomms',
2348490 => 'Starcomms',
2348581 => 'Starcomms',
2348582 => 'Starcomms',
2348583 => 'Starcomms',
2348584 => 'Starcomms',
2348585 => 'Starcomms',
2348586 => 'Starcomms',
2348587 => 'Starcomms',
2348588 => 'Starcomms',
2348782 => 'Starcomms',
2348783 => 'Starcomms',
2348784 => 'Starcomms',
2348785 => 'Starcomms',
2348786 => 'Starcomms',
2348787 => 'Starcomms',
2348788 => 'Starcomms',
2348789 => 'Starcomms',
2348885 => 'Starcomms',
2348886 => 'Starcomms',
2348887 => 'Starcomms',
234901 => 'Airtel',
234902 => 'Airtel',
234903 => 'MTN',
234904 => 'Airtel',
234905 => 'Glo',
234906 => 'MTN',
234907 => 'Airtel',
234908 => '9mobile',
234909 => '9mobile',
234980 => 'Starcomms',
234987 => 'Starcomms',
234911 => 'Airtel',
234912 => 'Airtel',
234913 => 'MTN',
234915 => 'Glo',
234916 => 'MTN',
);

View File

@@ -13,5 +13,5 @@
return array (
2356 => 'Airtel',
2357 => 'Sotel',
2359 => 'Millicom',
2359 => 'Tigo',
);

View File

@@ -11,8 +11,9 @@
*/
return array (
23670 => 'TC',
23670 => 'A-Cell',
23672 => 'Orange',
23675 => 'CTP',
23674 => 'Orange',
23675 => 'Telecel',
23677 => 'Nationlink',
);

View File

@@ -11,6 +11,7 @@
*/
return array (
23762 => 'Camtel',
237650 => 'MTN Cameroon',
237651 => 'MTN Cameroon',
237652 => 'MTN Cameroon',
@@ -23,6 +24,10 @@ return array (
237659 => 'Orange',
23766 => 'NEXTTEL',
23767 => 'MTN Cameroon',
23768 => 'MTN Cameroon',
23768 => 'NEXTTEL',
237680 => 'MTN Cameroon',
237681 => 'MTN Cameroon',
237682 => 'MTN Cameroon',
237683 => 'MTN Cameroon',
23769 => 'Orange',
);

View File

@@ -11,10 +11,7 @@
*/
return array (
23833 => 'T+',
23836 => 'CVMOVEL',
23843 => 'T+',
23846 => 'CVMOVEL',
23851 => 'T+',
23852 => 'T+',
23853 => 'T+',

View File

@@ -12,6 +12,5 @@
return array (
2402 => 'GETESA',
240550 => 'Muni',
240551 => 'HiTS',
2405 => 'Muni',
);

View File

@@ -27,5 +27,6 @@ return array (
2414 => 'Airtel',
2415 => 'Moov',
2416 => 'Libertis',
24165 => 'Moov',
2417 => 'Airtel',
);

View File

@@ -12,8 +12,8 @@
return array (
24201 => 'Equateur Telecom',
24202 => 'Congo telecom',
24204 => 'Warid',
24205 => 'Celtel',
24205 => 'Airtel',
24206 => 'MTN',
2428001 => 'Hightech Pro',
);

View File

@@ -11,15 +11,17 @@
*/
return array (
24380 => 'Supercell',
24380 => 'Orange',
24381 => 'Vodacom',
24382 => 'Vodacom',
24384 => 'CCT',
24383 => 'Vodacom',
24384 => 'Orange',
24385 => 'Orange',
24388 => 'Yozma Timeturns sprl -YTT',
24389 => 'Tigo',
24389 => 'Orange',
24390 => 'Africell',
24391 => 'Africell',
24397 => 'Zain',
24398 => 'Zain',
24399 => 'Zain',
24397 => 'Airtel',
24398 => 'Airtel',
24399 => 'Airtel',
);

View File

@@ -15,5 +15,6 @@ return array (
24492 => 'UNITEL',
24493 => 'UNITEL',
24494 => 'UNITEL',
24495 => 'Africell Angola',
24499 => 'Movicel',
);

View File

@@ -11,5 +11,5 @@
*/
return array (
4631 => 'Göteborg',
24638 => 'Sure Ltd',
);

View File

@@ -0,0 +1,21 @@
<?php
/**
* This file has been @generated by a phing task by {@link GeneratePhonePrefixData}.
* See [README.md](README.md#generating-data) for more information.
*
* Pull requests changing data in these files will not be accepted. See the
* [FAQ in the README](README.md#problems-with-invalid-numbers] on how to make
* metadata changes.
*
* Do not modify this file directly!
*/
return array (
24741 => 'Sure South Atlantic',
24742 => 'Sure South Atlantic',
24743 => 'Sure South Atlantic',
24745 => 'Sure South Atlantic',
24746 => 'Sure South Atlantic',
24747 => 'Sure South Atlantic',
24748 => 'Sure South Atlantic',
);

View File

@@ -11,6 +11,8 @@
*/
return array (
24821 => 'Intelvision',
24822 => 'Intelvision',
24825 => 'CWS',
24826 => 'CWS',
24827 => 'Airtel',

View File

@@ -14,4 +14,5 @@ return array (
25072 => 'TIGO',
25073 => 'Airtel',
25078 => 'MTN',
25079 => 'MTN',
);

View File

@@ -11,5 +11,6 @@
*/
return array (
2517 => 'Safaricom',
2519 => 'Ethio Telecom',
);

View File

@@ -17,14 +17,21 @@ return array (
25239 => 'AirSom',
25248 => 'AirSom',
25249 => 'AirSom',
252604 => 'Golis Telecom',
252605 => 'Golis Telecom',
252606 => 'Golis Telecom',
252607 => 'Golis Telecom',
25261 => 'Hormuud',
25262 => 'Somtel',
25263 => 'Telesom',
25264 => 'Somali Networks',
25265 => 'Somtel',
25266 => 'Somtel',
25267 => 'Nationlink',
25268 => 'Nationlink',
25268 => 'SomNet',
25269 => 'Nationlink',
25270 => 'Golis Telecom',
25271 => 'Amtel',
25279 => 'Somtel',
25280 => 'Somali Networks',
25288 => 'Somali Networks',

View File

@@ -11,6 +11,12 @@
*/
return array (
25410 => 'Airtel',
25411 => 'Safaricom',
254120 => 'Telkom',
254121 => 'Infura',
254124 => 'Finserve',
25413 => 'NRG Media Limited',
25470 => 'Safaricom',
25471 => 'Safaricom',
25472 => 'Safaricom',
@@ -18,7 +24,6 @@ return array (
25474 => 'Safaricom',
254744 => 'Homeland Media',
254747 => 'JTL',
254749 => 'WiAfrica',
25475 => 'Airtel',
254757 => 'Safaricom',
254758 => 'Safaricom',
@@ -32,7 +37,7 @@ return array (
254766 => 'Finserve',
254767 => 'Sema Mobile',
254768 => 'Safaricom',
254769 => 'Airtel',
254769 => 'Safaricom',
25477 => 'Telkom',
25478 => 'Airtel',
25479 => 'Safaricom',

View File

@@ -11,9 +11,8 @@
*/
return array (
25561 => 'Viettel',
25562 => 'Viettel',
25563 => 'MTC',
25564 => 'Cootel',
25565 => 'tiGO',
25566 => 'SMILE',
25567 => 'tiGO',

View File

@@ -14,11 +14,11 @@ return array (
25670 => 'Airtel',
25671 => 'UTL',
256720 => 'Smile',
256723 => 'Afrimax',
256726 => 'Tangerine',
25673 => 'K2',
25673 => 'Hamilton Telecom',
25674 => 'Sure Telecom',
25675 => 'Airtel',
25676 => 'MTN',
25677 => 'MTN',
25678 => 'MTN',
25679 => 'Africell',

View File

@@ -12,7 +12,6 @@
return array (
25729 => 'Leo',
2573 => 'Viettel',
2576 => 'Viettel',
25771 => 'Leo',
25772 => 'Leo',

View File

@@ -17,4 +17,5 @@ return array (
25885 => 'Vodacom',
25886 => 'Movitel',
25887 => 'Movitel',
25889 => 'GMPCS',
);

View File

@@ -11,8 +11,11 @@
*/
return array (
2607 => 'MTN',
26075 => 'ZAMTEL',
26076 => 'MTN',
26077 => 'Airtel',
26095 => 'ZAMTEL',
26096 => 'MTN',
26097 => 'Airtel',
26098 => 'Beeline Telecoms',
);

View File

@@ -14,5 +14,6 @@ return array (
26132 => 'Orange',
26133 => 'Airtel',
26134 => 'Telma',
26138 => 'Telma',
26139 => 'Blueline',
);

View File

@@ -28,7 +28,12 @@ return array (
26263930 => 'BJT',
26263939 => 'Only',
2626394 => 'SFR',
2626395 => 'BJT',
26263950 => 'BJT',
26263955 => 'Orange',
26263956 => 'Orange',
26263957 => 'Orange',
26263958 => 'Orange',
26263959 => 'Orange',
26263960 => 'Orange',
26263961 => 'Orange',
26263962 => 'Orange',
@@ -46,6 +51,9 @@ return array (
26263974 => 'Only',
26263975 => 'Only',
26263976 => 'Orange',
26263977 => 'Orange',
26263978 => 'Orange',
26263979 => 'Orange',
26263990 => 'BJT',
26263994 => 'Only',
26263995 => 'Only',
@@ -83,8 +91,17 @@ return array (
26269339 => 'Orange',
2626934 => 'Only',
26269350 => 'Only',
26269351 => 'Only',
26269352 => 'Only',
26269353 => 'Only',
26269354 => 'Only',
26269355 => 'Orange',
26269360 => 'Only',
26269361 => 'ZEOP Mobile',
26269362 => 'ZEOP Mobile',
26269363 => 'ZEOP Mobile',
26269364 => 'ZEOP Mobile',
26269365 => 'ZEOP Mobile',
26269366 => 'Orange',
26269370 => 'Only',
26269371 => 'Only',
@@ -102,4 +119,5 @@ return array (
26269394 => 'SFR',
26269397 => 'SFR',
26269399 => 'Orange',
2629769 => 'Orange',
);

View File

@@ -11,6 +11,9 @@
*/
return array (
26511 => 'Malawi Telecom-munications Ltd (MTL)',
2653 => 'TNM',
2657 => 'Globally Advanced Integrated Networks Ltd',
2658 => 'TNM',
2659 => 'Airtel',
);

View File

@@ -11,10 +11,6 @@
*/
return array (
822 => 'Seul',
8231 => 'Gyeonggi-do',
8233 => 'Gangwon-do',
8254 => 'Gyeongsangbuk-do',
8255 => 'Gyeongsangnam-do',
8264 => 'Insula Jeju',
2665 => 'Vodacom Lesotho (Pty) Ltd',
2666 => 'Econet Ezi-Cel Lesotho',
);

View File

@@ -11,6 +11,7 @@
*/
return array (
26732 => 'Mascom',
26771 => 'Mascom',
26772 => 'Orange',
26773 => 'BTC Mobile',
@@ -38,13 +39,16 @@ return array (
267766 => 'Mascom',
267767 => 'Mascom',
267768 => 'BTC Mobile',
267769 => 'BTC Mobile/Orange',
267769 => 'Orange',
267770 => 'Mascom',
267771 => 'Mascom',
267772 => 'BTC Mobile',
267773 => 'Orange',
267774 => 'Orange',
267775 => 'Orange',
267776 => 'Mascom',
267777 => 'Mascom',
267778 => 'Mascom',
267779 => 'Orange',
26778 => 'Orange',
);

View File

@@ -14,5 +14,5 @@ return array (
26876 => 'Swazi MTN',
26877 => 'SPTC',
26878 => 'Swazi MTN',
26879 => 'Swazi MTN',
26879 => 'Swazi Mobile Ltd',
);

View File

@@ -11,6 +11,53 @@
*/
return array (
2710492 => 'Vodacom',
2710493 => 'Vodacom',
2710494 => 'Vodacom',
2712492 => 'Vodacom',
27134920 => 'Vodacom',
27134921 => 'Vodacom',
27134922 => 'Vodacom',
27134925 => 'Vodacom',
27144950 => 'Vodacom',
27144952 => 'Vodacom',
27144953 => 'Vodacom',
27144955 => 'Vodacom',
27154920 => 'Vodacom',
27154950 => 'Vodacom',
27154951 => 'Vodacom',
27164920 => 'Vodacom',
27174920 => 'Vodacom',
27184920 => 'Vodacom',
2719 => 'Telkom Mobile',
2721492 => 'Vodacom',
27224950 => 'Vodacom',
27274950 => 'Vodacom',
27284920 => 'Vodacom',
2731492 => 'Vodacom',
27324920 => 'Vodacom',
27334920 => 'Vodacom',
27344920 => 'Vodacom',
27354920 => 'Vodacom',
27364920 => 'Vodacom',
27394920 => 'Vodacom',
27404920 => 'Vodacom',
2741492 => 'Vodacom',
27424920 => 'Vodacom',
27434920 => 'Vodacom',
27434921 => 'Vodacom',
27444920 => 'Vodacom',
27444921 => 'Vodacom',
27454920 => 'Vodacom',
27464920 => 'Vodacom',
27474950 => 'Vodacom',
27484920 => 'Vodacom',
27494920 => 'Vodacom',
2751492 => 'Vodacom',
27544950 => 'Vodacom',
27564920 => 'Vodacom',
27574920 => 'Vodacom',
27584920 => 'Vodacom',
27603 => 'MTN',
27604 => 'MTN',
27605 => 'MTN',
@@ -34,12 +81,35 @@ return array (
27647 => 'Vodacom',
27648 => 'Vodacom',
27649 => 'Vodacom',
27650 => 'Cell C',
27651 => 'Cell C',
27652 => 'Cell C',
27653 => 'Cell C',
27654 => 'Cell C',
27655 => 'MTN',
27656 => 'MTN',
27657 => 'MTN',
27658 => 'Telkom Mobile',
27659 => 'Telkom Mobile',
27660 => 'Vodacom',
27661 => 'Vodacom',
27662 => 'Vodacom',
27663 => 'Vodacom',
27664 => 'Vodacom',
27665 => 'Vodacom',
27670 => 'Telkom Mobile',
27671 => 'Telkom Mobile',
27672 => 'Telkom Mobile',
27673 => 'Vodacom',
27674 => 'Vodacom',
27675 => 'Vodacom',
27676 => 'Telkom Mobile',
27677 => 'Telkom Mobile',
2768 => 'Telkom Mobile',
27686 => 'MTN',
27687 => 'MTN',
27688 => 'MTN',
27689 => 'MTN',
2771 => 'Vodacom',
27710 => 'MTN',
27717 => 'MTN',
@@ -48,7 +118,6 @@ return array (
2772 => 'Vodacom',
2773 => 'MTN',
2774 => 'Cell C',
27741 => 'Virgin Mobile',
2776 => 'Vodacom',
2778 => 'MTN',
2779 => 'Vodacom',
@@ -61,7 +130,19 @@ return array (
27816 => 'WBS Mobile',
27817 => 'Telkom Mobile',
27818 => 'Vodacom',
278190 => 'TelAfrica (Wirles Connect)',
278191 => 'TelAfrica (Wirles Connect)',
278192 => 'TelAfrica (Wirles Connect)',
2782 => 'Vodacom',
2783 => 'MTN',
2784 => 'Cell C',
2787086 => 'Vodacom',
2787087 => 'Vodacom',
2787158 => 'Vodacom',
2787285 => 'Vodacom',
2787286 => 'Vodacom',
2787287 => 'Vodacom',
2787288 => 'Vodacom',
2787289 => 'Vodacom',
2787310 => 'Vodacom',
);

View File

@@ -0,0 +1,30 @@
<?php
/**
* This file has been @generated by a phing task by {@link GeneratePhonePrefixData}.
* See [README.md](README.md#generating-data) for more information.
*
* Pull requests changing data in these files will not be accepted. See the
* [FAQ in the README](README.md#problems-with-invalid-numbers] on how to make
* metadata changes.
*
* Do not modify this file directly!
*/
return array (
29051 => 'Sure South Atlantic Ltd',
29052 => 'Sure South Atlantic Ltd',
29053 => 'Sure South Atlantic Ltd',
29054 => 'Sure South Atlantic Ltd',
29055 => 'Sure South Atlantic Ltd',
29056 => 'Sure South Atlantic Ltd',
29057 => 'Sure South Atlantic Ltd',
29058 => 'Sure South Atlantic Ltd',
29061 => 'Sure South Atlantic Ltd',
29062 => 'Sure South Atlantic Ltd',
29063 => 'Sure South Atlantic Ltd',
29064 => 'Sure South Atlantic Ltd',
29065 => 'Sure South Atlantic Ltd',
29066 => 'Sure South Atlantic Ltd',
29067 => 'Sure South Atlantic Ltd',
29068 => 'Sure South Atlantic Ltd',
);

View File

@@ -11,11 +11,6 @@
*/
return array (
822 => 'Сеул',
8232 => 'Инчон',
8251 => 'Бусан',
8252 => 'Улсан',
8253 => 'Тегу',
8262 => 'Квангџу',
8264 => 'Чеџу',
29117 => 'EriTel',
2917 => 'EriTel',
);

View File

@@ -14,15 +14,15 @@ return array (
29729 => 'Digicel',
29756 => 'SETAR',
29759 => 'SETAR',
29763 => 'Digicel',
29760 => 'SETAR',
29762 => 'MIO Wireless',
29763 => 'MIO Wireless',
29764 => 'Digicel',
29766 => 'SETAR',
29769 => 'SETAR',
297690 => 'SETAR',
297699 => 'SETAR',
29773 => 'Digicel',
29774 => 'Digicel',
29777 => 'SETAR',
297995 => 'SETAR',
297996 => 'SETAR',
297997 => 'SETAR',
297998 => 'SETAR',
);

View File

@@ -11,8 +11,19 @@
*/
return array (
2982 => 'Faroese Telecom',
29821 => 'Faroese Telecom',
29822 => 'Faroese Telecom',
29823 => 'Faroese Telecom',
29824 => 'Faroese Telecom',
29825 => 'Faroese Telecom',
29826 => 'Faroese Telecom',
29827 => 'Faroese Telecom',
29828 => 'Faroese Telecom',
29829 => 'Faroese Telecom',
2985 => 'Vodafone',
2986 => 'Vodafone',
2987 => 'Vodafone',
29878 => 'Faroese Telecom',
29879 => 'Faroese Telecom',
29891 => 'Tosa',
29896 => 'Faroese Telecom',
);

View File

@@ -34,6 +34,8 @@ return array (
30690500 => 'MI Carrier Services',
30690555 => 'AMD Telecom',
30690574 => 'BWS',
30690575 => 'BWS',
30690588 => 'BWS',
30690599 => 'BWS',
306906 => 'Wind',
306907 => 'Wind',
@@ -41,23 +43,23 @@ return array (
306909 => 'Wind',
30691000 => 'BWS',
30691234 => 'M-STAT',
30691345 => 'Nova',
30691345 => 'Forthnet',
30691400 => 'AMD Telecom',
30691600 => 'Compatel',
30691700 => 'Inter Telecom',
30691888 => 'OSE',
30692354 => 'Premium Net International',
30692356 => 'SIA NETBALT',
30692428 => 'Premium Net International',
30693 => 'Wind',
30694 => 'Vodafone',
306950 => 'Vodafone',
306951 => 'Vodafone',
30695200 => 'Compatel',
30695210 => 'MI Carrier Services',
3069522 => 'Vodafone',
3069523 => 'Vodafone',
30695290 => 'MI Carrier Services',
30695299 => 'BWS',
3069524 => 'BWS',
3069529 => 'BWS',
3069530 => 'Cyta',
30695310 => 'MI Carrier Services',
30695328 => 'Premium Net International',
@@ -66,6 +68,7 @@ return array (
30695355 => 'Cyta',
30695400 => 'AMD Telecom',
30695410 => 'MI Carrier Services',
30695456 => 'BWS',
30695490 => 'MI Carrier Services',
30695499 => 'M-STAT',
306955 => 'Vodafone',
@@ -77,9 +80,11 @@ return array (
30697 => 'Cosmote',
30698 => 'Cosmote',
3069900 => 'Wind',
30699010 => 'BWS',
30699022 => 'Yuboto',
30699046 => 'Premium Net International',
30699048 => 'AMD Telecom',
30699099 => 'BWS',
306991 => 'Wind',
306992 => 'Wind',
306993 => 'Wind',
@@ -89,4 +94,5 @@ return array (
306997 => 'Wind',
306998 => 'Wind',
306999 => 'Wind',
3094 => 'Vodafone',
);

View File

@@ -11,40 +11,46 @@
*/
return array (
31610 => 'KPN',
3161 => 'KPN',
31611 => 'Vodafone Libertel B.V.',
31612 => 'KPN',
31613 => 'KPN',
31614 => 'T-Mobile',
31615 => 'Vodafone Libertel B.V.',
31616 => 'Telfort',
31617 => 'Telfort',
31618 => 'T-Mobile Thuis',
31620 => 'KPN',
31621 => 'Vodafone Libertel B.V.',
31622 => 'KPN',
31623 => 'KPN',
31624 => 'T-Mobile',
31625 => 'Vodafone Libertel B.V.',
31626 => 'Telfort',
31626 => 'KPN',
31627 => 'Vodafone Libertel B.V.',
31628 => 'T-Mobile Thuis',
31629 => 'Vodafone Libertel B.V.',
31630 => 'KPN',
31631 => 'Vodafone Libertel B.V.',
31633 => 'Telfort',
31633 => 'KPN',
31634 => 'T-Mobile',
316351 => 'Intercity Zakelijk',
316351 => 'Glotell B.V (V-Tell NL)',
316352 => 'Lancelot',
316353 => 'KPN',
316356 => 'ASPIDER Solutions Nederland B.V.',
316357 => 'ASPIDER Solutions Nederland B.V.',
316358 => 'ASPIDER Solutions Nederland B.V.',
316359 => 'ASPIDER Solutions Nederland B.V.',
31636 => 'Tele2',
31637 => 'Teleena (MVNE)',
31638 => 'T-Mobile Thuis',
31639 => 'T-Mobile Thuis',
31640 => 'Tele2',
31641 => 'T-Mobile',
31642 => 'T-Mobile',
31643 => 'T-Mobile',
31644 => 'Telfort',
31644 => 'KPN',
31645 => 'Telfort',
31646 => 'Vodafone Libertel B.V.',
31647 => 'Telfort',
31649 => 'Telfort',
31647 => 'KPN',
31648 => 'T-Mobile Thuis',
31649 => 'KPN',
31650 => 'Vodafone Libertel B.V.',
31651 => 'KPN',
31652 => 'Vodafone Libertel B.V.',
@@ -53,10 +59,16 @@ return array (
31655 => 'Vodafone Libertel B.V.',
31656 => 'T-Mobile',
31657 => 'KPN',
31658 => 'Telfort',
31658 => 'Lebara',
316580 => 'Private Mobility Nederland',
316587 => 'KPN',
316588 => 'KPN',
316589 => 'KPN',
31659 => 'Vectone Mobile/Delight Mobile',
316599 => 'Motto',
31680 => 'Vodafone Libertel B.V.',
31681 => 'T-Mobile',
31682 => 'KPN',
31683 => 'KPN',
31684 => 'Lycamobile',
31685 => 'Lycamobile',

View File

@@ -11,6 +11,7 @@
*/
return array (
3245001 => 'Gateway Communications',
32455 => 'VOO',
32456 => 'Mobile Vikings/JIM Mobile',
32460 => 'Proximus',
@@ -23,6 +24,7 @@ return array (
324655 => 'Lycamobile',
324656 => 'Lycamobile',
324657 => 'Lycamobile',
324658 => 'Lycamobile',
324659 => 'Lycamobile',
324660 => 'Lycamobile',
324661 => 'Lycamobile',
@@ -33,17 +35,32 @@ return array (
324666 => 'Vectone',
324667 => 'Vectone',
324669 => 'Voxbone SA',
324670 => 'Telenet',
324671 => 'Join Experience Belgium',
324672 => 'Join Experience Belgium',
32467306 => 'Telenet',
324674 => 'Febo Telecom',
324676 => 'Lycamobile',
324681 => 'Telenet',
324682 => 'Telenet',
324683 => 'Telenet',
324684 => 'Telenet',
324685 => 'Telenet',
324677 => 'Lycamobile',
324678 => 'Lycamobile',
324679 => 'Interactive Digital Media GmbH',
32468 => 'Telenet',
324686 => 'OnOff Télécom SASU',
324687 => 'Premium Routing GmbH',
324688 => 'Premium Routing GmbH',
324689 => 'Febo Telecom',
32469 => 'Telenet',
3247 => 'Proximus',
3248 => 'Telenet',
324802 => 'TISMI BV',
324805 => 'Voyacom SPRL',
324807 => 'MessageBird BV',
324809 => 'Ericsson NV',
32483 => 'Telenet',
32484 => 'Telenet',
32485 => 'Telenet',
32486 => 'Telenet',
32487 => 'Telenet',
32488 => 'Telenet',
32489 => 'Telenet',
3249 => 'Orange',
);

View File

@@ -11,62 +11,164 @@
*/
return array (
336000 => 'Free Mobile',
336001 => 'Orange France',
336002 => 'SFR',
336003 => 'Bouygues',
3360040 => 'Zeop',
3360041 => 'Orange France',
3360042 => 'Digicel Antilles Francaises Guyane',
3360043 => 'Dauphin Telecom',
3360044 => 'OUTREMER TELECOM',
3360045 => 'UTS CARAIBES',
3360051 => 'Orange France',
3360052 => 'SFR',
3360053 => 'BJT',
3360054 => 'Only (Telco OI)',
3360055 => 'Only (Telco OI)',
336006 => 'Free Mobile',
336007 => 'SFR',
336008 => 'Orange France',
336009 => 'Bouygues',
33601 => 'SFR',
33602 => 'SFR',
33603 => 'SFR',
336040 => 'SFR',
336041 => 'SFR',
336044 => 'SFR',
336040 => 'Afone',
336041 => 'Afone',
336042 => 'e*Message',
336043 => 'e*Message',
336044 => 'Afone',
336045 => 'SFR',
336046 => 'SFR',
336047 => 'SFR',
336048 => 'SFR',
336049 => 'SFR',
336050 => 'SFR',
336051 => 'SFR',
336052 => 'SFR',
336053 => 'SFR',
336054 => 'SFR',
336069 => 'SFR',
336050 => 'Euroinformation Telecom',
336051 => 'Euroinformation Telecom',
336052 => 'Euroinformation Telecom',
336053 => 'Euroinformation Telecom',
336054 => 'Euroinformation Telecom',
336055 => 'Lycamobile',
336056 => 'Lycamobile',
336057 => 'Lycamobile',
336058 => 'Lycamobile',
336059 => 'Lycamobile',
336060 => 'e*Message',
336061 => 'e*Message',
336062 => 'e*Message',
336063 => 'e*Message',
336064 => 'Afone',
336065 => 'Euroinformation Telecom',
336066 => 'Euroinformation Telecom',
336067 => 'Euroinformation Telecom',
336068 => 'Euroinformation Telecom',
336069 => 'Euroinformation Telecom',
33607 => 'Orange France',
33608 => 'Orange France',
33609 => 'SFR',
3361 => 'SFR',
3362 => 'SFR',
3363 => 'Orange France',
33634 => 'SFR',
33635 => 'SFR',
336360 => 'SFR',
336361 => 'SFR',
336362 => 'SFR',
336363 => 'SFR',
336364 => 'SFR',
33636 => 'Euroinformation Telecom',
3363800 => 'Globalstar Europe',
3363801 => 'Prixtel',
3363802 => 'Prixtel',
3363803 => 'Prixtel',
3363804 => 'Prixtel',
3363805 => 'Prixtel',
3363806 => 'IP Directions',
3363807 => 'Alphalink',
3363808 => 'Alphalink',
3363809 => 'Alphalink',
33640 => 'Orange France',
3364000 => 'Globalstar Europe',
3364001 => 'Globalstar Europe',
3364002 => 'Globalstar Europe',
3364003 => 'Globalstar Europe',
3364004 => 'Globalstar Europe',
3364005 => 'Coriolis Telecom',
3364006 => 'Coriolis Telecom',
3364007 => 'Coriolis Telecom',
3364008 => 'Coriolis Telecom',
3364009 => 'Coriolis Telecom',
336410 => 'La poste telecom',
336411 => 'La poste telecom',
336412 => 'La poste telecom',
336413 => 'La poste telecom',
336414 => 'La poste telecom',
336415 => 'La poste telecom',
3364160 => 'Euroinformation Telecom',
3364161 => 'Euroinformation Telecom',
3364162 => 'Mobiquithings',
3364163 => 'SCT',
3364164 => 'Legos',
3364165 => 'e*Message',
3364166 => 'SFR',
3364167 => 'SFR',
3364168 => 'SFR',
3364169 => 'SFR',
33642 => 'Orange France',
33643 => 'Orange France',
336440 => 'La poste telecom',
336441 => 'Orange France',
336442 => 'Orange France',
336443 => 'Orange France',
336444 => 'Transatel',
336445 => 'Transatel',
336446 => 'Transatel',
336447 => 'La poste telecom',
336448 => 'La poste telecom',
336449 => 'La poste telecom',
33645 => 'Orange France',
33646 => 'SFR',
33647 => 'Orange France',
33648 => 'Orange France',
33649 => 'Orange France',
3364950 => 'Keyyo',
3364990 => 'Intercall',
3364991 => 'Intercall',
3364994 => 'e*Message',
3364995 => 'Prixtel',
3364996 => 'e*Message',
3364997 => 'e*Message',
3364998 => 'Prixtel',
3364999 => 'SFR',
33650 => 'Bouygues',
33653 => 'Bouygues',
33651 => 'Free Mobile',
33652 => 'Free Mobile',
336530 => 'Bouygues',
336531 => 'Bouygues',
336532 => 'Bouygues',
336533 => 'Bouygues',
336534 => 'Bouygues',
336535 => 'Free Mobile',
336536 => 'Free Mobile',
336537 => 'Free Mobile',
336538 => 'Free Mobile',
336539 => 'Free Mobile',
33654 => 'Orange France',
33655 => 'SFR',
33656 => 'e*Message',
3365660 => 'Mobiquithings',
3365661 => 'Airbus Defence and Space',
3365662 => 'Mobiquithings',
3365663 => 'Mobiquithings',
3365664 => 'Mobiquithings',
3365665 => 'Mobiquithings',
3365666 => 'Prixtel',
3365667 => 'Prixtel',
3365668 => 'Prixtel',
3365669 => 'Prixtel',
336567 => 'La poste telecom',
336568 => 'La poste telecom',
33657 => 'e*Message',
33658 => 'Bouygues',
33659 => 'Bouygues',
3366 => 'Bouygues',
3367 => 'Orange France',
3368 => 'Orange France',
33692 => 'Bouygues',
33693 => 'Bouygues',
33696 => 'Bouygues',
33698 => 'Bouygues',
33699 => 'Bouygues',
33700000 => 'Orange France',
@@ -74,4 +176,202 @@ return array (
33700002 => 'Mobiquithings',
33700003 => 'Bouygues',
33700004 => 'Afone',
33700005 => 'Coriolis Telecom',
33700006 => 'Mobiquithings',
337500 => 'Euroinformation Telecom',
337501 => 'SFR',
337502 => 'SFR',
337503 => 'SFR',
337504 => 'SFR',
3375050 => 'Euroinformation Telecom',
3375051 => 'Euroinformation Telecom',
3375052 => 'Euroinformation Telecom',
3375053 => 'Euroinformation Telecom',
3375057 => 'Euroinformation Telecom',
3375058 => 'Euroinformation Telecom',
3375059 => 'Sewan communications',
337506 => 'Orange France',
3375060 => 'Euroinformation Telecom',
3375070 => 'Euroinformation Telecom',
3375071 => 'Netcom Group',
3375072 => 'Netcom Group',
3375073 => 'Alphalink',
3375074 => 'Alphalink',
3375075 => 'Alphalink',
3375076 => 'Globalstar Europe',
3375077 => 'Globalstar Europe',
3375078 => 'China Telecom (France) Limited',
3375079 => 'China Telecom (France) Limited',
337508 => 'SFR',
337509 => 'SFR',
33751 => 'Lycamobile',
337516 => 'SFR',
337517 => 'Completel',
337518 => 'Lebara France Limited',
337519 => 'Lebara France Limited',
3375202 => 'Prixtel',
3375203 => 'Prixtel',
3375204 => 'Prixtel',
3375205 => 'Prixtel',
3375206 => 'Prixtel',
3375207 => 'Prixtel',
3375208 => 'Prixtel',
3375209 => 'Prixtel',
337521 => 'Lebara France Limited',
337522 => 'Lebara France Limited',
337523 => 'Lebara France Limited',
337524 => 'Lebara France Limited',
337525 => 'Lebara France Limited',
337526 => 'SFR',
337527 => 'Lebara France Limited',
337528 => 'Lebara France Limited',
337529 => 'Lebara France Limited',
33753 => 'Lycamobile',
337540 => 'Lebara France Limited',
337541 => 'Lebara France Limited',
337542 => 'Lebara France Limited',
337543 => 'Prixtel',
3375430 => 'TDF',
3375431 => 'Legos',
3375432 => 'Euroinformation Telecom',
337544 => 'Lebara France Limited',
337545 => 'Lebara France Limited',
337546 => 'Mobiquithings',
337547 => 'ACN Communications',
337548 => 'Completel',
337549 => 'Completel',
33755 => 'Lebara France Limited',
3375550 => 'Legos',
3375551 => 'Legos',
3375552 => 'Legos',
3375553 => 'Legos',
3375554 => 'Legos',
3375555 => 'Euroinformation Telecom',
3375556 => 'Intercall',
3375557 => 'Intercall',
3375558 => 'Sewan communications',
3375559 => 'Sewan communications',
3375560 => 'Prixtel',
3375561 => 'Prixtel',
3375562 => 'Prixtel',
3375563 => 'Prixtel',
3375564 => 'Prixtel',
3375565 => 'Sewan communications',
3375566 => 'Euroinformation Telecom',
3375567 => 'Euroinformation Telecom',
3375568 => 'Euroinformation Telecom',
3375569 => 'Axialys',
337560 => 'Euroinformation Telecom',
337561 => 'Euroinformation Telecom',
337562 => 'Euroinformation Telecom',
3375630 => 'Euroinformation Telecom',
3375631 => 'Euroinformation Telecom',
3375632 => 'Euroinformation Telecom',
3375633 => 'Euroinformation Telecom',
3375634 => 'Euroinformation Telecom',
3375644 => 'SFR',
3375645 => 'SFR',
337565 => 'Transatel',
337566 => 'Transatel',
337567 => 'Transatel',
337568 => 'Transatel',
337569 => 'Transatel',
3375700 => 'Sewan communications',
3375701 => 'Mobiweb telecom limited',
3375702 => 'Mobiweb telecom limited',
3375703 => 'Mobiweb telecom limited',
3375704 => 'Mobiweb telecom limited',
3375705 => 'Mobiweb telecom limited',
3375706 => 'Nordnet',
3375707 => 'Keyyo',
3375717 => 'Keyyo',
337572 => 'Mobiquithings',
337573 => 'Mobiquithings',
337574 => 'Coriolis Telecom',
337575 => 'Coriolis Telecom',
3375757 => 'Euroinformation Telecom',
3375758 => 'Euroinformation Telecom',
3375759 => 'Twilio Ireland Limited',
3375760 => 'Twilio Ireland Limited',
3375763 => 'Euroinformation Telecom',
3375767 => 'Euroinformation Telecom',
3375770 => 'SFR',
3375771 => 'SFR',
3375772 => 'SFR',
3375773 => 'SFR',
3375774 => 'SFR',
3375777 => 'Euroinformation Telecom',
3375779 => 'Halys',
3375786 => 'Orange France',
3375787 => 'Euroinformation Telecom',
3375788 => 'BJT',
3375789 => 'BJT',
337579 => 'Legos',
33758 => 'Lycamobile',
33759 => 'Vectone mobile',
3376 => 'Bouygues',
33766 => 'Free Mobile',
33767 => 'Free Mobile',
33768 => 'Free Mobile',
33769 => 'Free Mobile',
337700 => 'Orange France',
337701 => 'Orange France',
337702 => 'Orange France',
337703 => 'SFR',
337704 => 'SFR',
337705 => 'Euroinformation Telecom',
337706 => 'Euroinformation Telecom',
337707 => 'Euroinformation Telecom',
337708 => 'Euroinformation Telecom',
337709 => 'Euroinformation Telecom',
337710 => 'Euroinformation Telecom',
337711 => 'Euroinformation Telecom',
337712 => 'Euroinformation Telecom',
337713 => 'SFR',
337714 => 'SFR',
3377150 => 'SFR',
3377151 => 'SFR',
3377152 => 'SFR',
3377153 => 'SFR',
3377154 => 'SFR',
3377155 => 'Euroinformation Telecom',
3377156 => 'Euroinformation Telecom',
3377157 => 'Euroinformation Telecom',
3377158 => 'Euroinformation Telecom',
3377159 => 'Euroinformation Telecom',
337716 => 'Euroinformation Telecom',
337717 => 'Euroinformation Telecom',
337718 => 'Euroinformation Telecom',
3377190 => 'Euroinformation Telecom',
3377191 => 'Euroinformation Telecom',
3377192 => 'Euroinformation Telecom',
3377193 => 'Euroinformation Telecom',
3377194 => 'Euroinformation Telecom',
33772 => 'Orange France',
33773 => 'Syma mobile',
33774 => 'Syma mobile',
337750 => 'SFR',
337751 => 'SFR',
337752 => 'SFR',
337753 => 'SFR',
337754 => 'SFR',
337755 => 'Mobiquithings',
337756 => 'Mobiquithings',
337757 => 'Free Mobile',
33776 => 'SFR',
33777 => 'SFR',
33778 => 'SFR',
33779 => 'SFR',
3378 => 'Orange France',
33780 => 'Afone',
337807 => 'Lebara France Limited',
337808 => 'Lebara France Limited',
337809 => 'Onoff telecom',
33781 => 'Free Mobile',
33782 => 'Free Mobile',
33783 => 'Free Mobile',
337846 => 'La poste telecom',
337847 => 'La poste telecom',
337848 => 'La poste telecom',
337849 => 'Euroinformation Telecom',
);

View File

@@ -11,21 +11,24 @@
*/
return array (
345901 => 'Movistar',
345906 => 'Vodafone',
34600 => 'Vodafone',
346010 => 'Vodafone',
346011 => 'Vodafone',
346012 => 'Vodafone',
346013 => 'Vodafone',
346014 => 'Vodafone',
346015 => 'HITS',
346016 => 'Lcrcom',
346017 => 'Vodafone',
34601 => 'Vodafone',
346016 => 'Orange',
346018 => 'Orange',
346019 => 'Orange',
346020 => 'Lycamobile',
346021 => 'Lycamobile',
3460220 => 'Orange',
3460221 => 'Ion mobile',
3460222 => 'Vozelia',
3460223 => 'Orange',
3460224 => 'Oceans',
3460225 => 'VozTelecom',
3460226 => 'Orange',
3460227 => 'Orange',
3460228 => 'Orange',
3460229 => 'Boutique',
346023 => 'Lycamobile',
346024 => 'Lebara',
@@ -53,10 +56,9 @@ return array (
346037 => 'Vodafone',
346038 => 'Vodafone',
346039 => 'Lebara',
346040 => 'R',
346041 => 'Lebara',
346042 => 'Lebara',
346043 => 'Lebara',
34604 => 'Lebara',
346040 => 'Orange',
346045 => 'Orange',
34605 => 'Orange',
3460529 => 'MasMovil',
34606 => 'Movistar',
@@ -64,26 +66,35 @@ return array (
34608 => 'Movistar',
34609 => 'Movistar',
34610 => 'Vodafone',
346110 => 'Republica Movil',
34611 => 'Republica Movil',
346110 => 'Orange',
346112 => 'Lebara',
346113 => 'Lebara',
346120 => 'Syma',
346121 => 'Syma',
34612 => 'Syma',
346122 => 'Lycamobile',
346124 => 'Lycamobile',
346125 => 'Lycamobile',
34613 => 'Yoigo',
34615 => 'Orange',
34616 => 'Movistar',
34617 => 'Vodafone',
34618 => 'Movistar',
34619 => 'Movistar',
34620 => 'Movistar',
346212 => 'Ion mobile',
346210 => 'Republica Movil',
346211 => 'Republica Movil',
346212 => 'Movistar',
346213 => 'Republica Movil',
346214 => 'Republica Movil',
346215 => 'Republica Movil',
346216 => 'Republica Movil',
34622 => 'Yoigo',
346230 => 'Yoigo',
346231 => 'Yoigo',
346236 => 'Altecom',
34624 => 'DigiMobil',
34625 => 'Orange',
3462529 => 'MasMovil',
3462529 => 'Yoigo',
34626 => 'Movistar',
34627 => 'Vodafone',
34628 => 'Movistar',
@@ -92,42 +103,31 @@ return array (
34631 => 'Lycamobile',
34632 => 'Lycamobile',
34633 => 'Yoigo',
34634 => 'Vodafone',
346340 => 'Lebara',
346341 => 'Lebara',
346342 => 'Vodafone',
346343 => 'HITS',
346344 => 'Eroski movil',
346345 => 'PepePhone',
346346 => 'Vodafone',
346347 => 'Vodafone',
346348 => 'Vodafone',
346349 => 'Vodafone',
346343 => 'Carrier Enabler',
346345 => 'Movistar',
34635 => 'Orange',
3463529 => 'MasMovil',
3463529 => 'Yoigo',
34636 => 'Movistar',
34637 => 'Vodafone',
34638 => 'Movistar',
34639 => 'Movistar',
34640 => 'Orange',
346404 => 'MasMovil',
34641 => 'DigiMobil',
34642 => 'DigiMobil',
346430 => 'DigiMobil',
346431 => 'DigiMobil',
346432 => 'DigiMobil',
346433 => 'DigiMobil',
346434 => 'DigiMobil',
346435 => 'DigiMobil',
346436 => 'DigiMobil',
34644 => 'Simyo',
34643 => 'DigiMobil',
34644 => 'Orange',
34645 => 'Orange',
3464529 => 'MasMovil',
3464529 => 'Yoigo',
34646 => 'Movistar',
34647 => 'Vodafone',
34648 => 'Movistar',
34649 => 'Movistar',
3465 => 'Orange',
34650 => 'Movistar',
3465229 => 'MasMovil',
3465229 => 'Yoigo',
3465329 => 'DIA',
3465429 => 'DIA',
3465529 => 'DIA',
@@ -143,7 +143,7 @@ return array (
34666 => 'Vodafone',
34667 => 'Vodafone',
346681 => 'Truphone',
346685 => 'Carrefour',
346685 => 'Orange',
346686 => 'Parlem',
346688 => 'Parlem',
34669 => 'Movistar',
@@ -161,22 +161,22 @@ return array (
346813 => 'Movistar',
346814 => 'Movistar',
346815 => 'Movistar',
346816 => 'MasMovil',
346816 => 'Yoigo',
34682 => 'Movistar',
34683 => 'Movistar',
346840 => 'Tuenti',
346841 => 'Tuenti',
346842 => 'Tuenti',
346843 => 'Tuenti',
346840 => 'Movistar',
346841 => 'Movistar',
346842 => 'Movistar',
346843 => 'Movistar',
3468440 => 'Eurona',
3468441 => 'Lemonvil',
3468442 => 'BluePhone',
3468443 => 'BT',
3468444 => 'BT',
3468445 => 'Ion mobile',
3468445 => 'Aire Networks',
3468447 => 'Quattre',
3468448 => 'Nethits',
346845 => 'Tuenti',
346845 => 'Movistar',
346846 => 'Telecable',
34685 => 'Orange',
3468529 => 'Carrefour',
@@ -184,9 +184,9 @@ return array (
34687 => 'Vodafone',
346880 => 'YouMobile',
346881 => 'YouMobile',
346882 => 'MasMovil',
346883 => 'MasMovil',
346884 => 'MasMovil',
346882 => 'Yoigo',
346883 => 'Yoigo',
346884 => 'Yoigo',
346885 => 'YouMobile',
346886 => 'Euskaltel',
346887 => 'Euskaltel',
@@ -197,39 +197,40 @@ return array (
34689 => 'Movistar',
34690 => 'Movistar',
34691 => 'Orange',
346919 => 'MasMovil',
346919 => 'Yoigo',
3469190 => 'MasMovil',
3469198 => 'Carrefour',
3469199 => 'Carrefour',
34692 => 'Orange',
3469229 => 'Carrefour',
346927 => 'Carrefour',
3469300 => 'MasMovil',
3469301 => 'MasMovil',
3469302 => 'MasMovil',
3469303 => 'MasMovil',
3469304 => 'MasMovil',
3469305 => 'MasMovil',
3469306 => 'MasMovil',
3469301 => 'Yoigo',
3469302 => 'Yoigo',
3469303 => 'Yoigo',
3469304 => 'Yoigo',
3469305 => 'Yoigo',
3469306 => 'Yoigo',
346931 => 'Orange',
3469310 => 'MasMovil',
346932 => 'MasMovil',
346932 => 'Yoigo',
3469320 => 'Carrefour',
3469321 => 'Carrefour',
3469329 => 'Orange',
346933 => 'Carrefour',
3469336 => 'MasMovil',
3469337 => 'MasMovil',
3469336 => 'Yoigo',
3469337 => 'Yoigo',
3469340 => 'DIA',
3469341 => 'DIA',
3469342 => 'DIA',
3469343 => 'DIA',
3469344 => 'DIA',
3469345 => 'MasMovil',
3469346 => 'MasMovil',
3469347 => 'MasMovil',
3469348 => 'MasMovil',
3469349 => 'MasMovil',
346935 => 'MasMovil',
3469345 => 'Yoigo',
3469346 => 'Yoigo',
3469347 => 'Yoigo',
3469348 => 'Yoigo',
3469349 => 'Yoigo',
346935 => 'Yoigo',
3469360 => 'DIA',
3469361 => 'DIA',
3469362 => 'DIA',
@@ -237,37 +238,22 @@ return array (
3469364 => 'DIA',
3469365 => 'Carrefour',
3469366 => 'Carrefour',
3469367 => 'MasMovil',
3469368 => 'MasMovil',
3469369 => 'MasMovil',
346937 => 'MasMovil',
3469380 => 'MasMovil',
3469381 => 'MasMovil',
3469382 => 'MasMovil',
3469383 => 'Carrefour',
3469384 => 'Carrefour',
3469385 => 'MasMovil',
3469386 => 'MasMovil',
3469387 => 'Carrefour',
3469388 => 'Carrefour',
3469389 => 'Orange',
3469391 => 'MasMovil',
3469392 => 'MasMovil',
3469393 => 'MasMovil',
3469394 => 'MasMovil',
3469395 => 'MasMovil',
3469396 => 'MasMovil',
3469397 => 'MasMovil',
3469398 => 'MasMovil',
3469399 => 'MasMovil',
3469367 => 'Yoigo',
3469368 => 'Yoigo',
3469369 => 'Yoigo',
346937 => 'Yoigo',
346938 => 'Yoigo',
346939 => 'Yoigo',
34694 => 'Movistar',
346944 => 'MasMovil',
346944 => 'Yoigo',
346945 => 'Yoigo',
346946 => 'Yoigo',
34695 => 'Orange',
34696 => 'Movistar',
34697 => 'Vodafone',
34698 => 'MasMovil',
34698 => 'Yoigo',
346981 => 'R',
346989 => 'Eroski movil',
346989 => 'Vodafone',
34699 => 'Movistar',
347110 => 'Zinnia',
347111 => 'Vodafone',
@@ -293,12 +279,14 @@ return array (
347225 => 'Yoigo',
347226 => 'Yoigo',
3472260 => 'MasMovil',
3472261 => 'PepePhone',
347227 => 'Yoigo',
347228 => 'Yoigo',
347277 => 'Vodafone',
3474442 => 'Deion',
3474443 => 'InfoVOIP',
3474448 => 'Ion mobile',
3474447 => 'Jetnet',
3474448 => 'Aire Networks',
3474449 => 'Alai',
347446 => 'PTV',
347477 => 'Orange',

View File

@@ -11,6 +11,11 @@
*/
return array (
3505 => 'GibTel',
3506 => 'Limba',
35051 => 'Gibfibre',
35052 => 'Gibfibre',
35054 => 'GibTel',
35056 => 'GibTel',
35057 => 'GibTel',
35058 => 'GibTel',
3506 => 'GibTel',
);

View File

@@ -11,6 +11,21 @@
*/
return array (
3511 => 'NOS',
351609230 => 'NOS',
35160929 => 'NOS',
3516093 => 'NOS',
351639230 => 'NOS',
351639233 => 'Digi Communications',
35163929 => 'NOS',
3516393 => 'NOS',
351659230 => 'NOS',
351659233 => 'Digi Communications',
35165929 => 'NOS',
3516593 => 'NOS',
351669230 => 'NOS',
35166929 => 'NOS',
3516693 => 'NOS',
35191 => 'Vodafone',
3519200 => 'Lycamobile',
3519201 => 'Lycamobile',
@@ -19,19 +34,15 @@ return array (
3519204 => 'Lycamobile',
3519205 => 'Lycamobile',
351921 => 'Vodafone',
3519220 => 'CTT',
3519221 => 'CTT',
3519222 => 'CTT',
3519230 => 'Vectone',
3519231 => 'Vectone',
3519232 => 'Vectone',
3519233 => 'Vectone',
3519234 => 'Vectone',
3519240 => 'MEO',
3519241 => 'MEO',
3519242 => 'MEO',
3519243 => 'MEO',
3519244 => 'MEO',
3519220 => 'Vodafone',
3519221 => 'MEO',
3519222 => 'MEO',
3519230 => 'NOS',
3519231 => 'Vodafone',
3519232 => 'MEO',
3519233 => 'Digi Communications',
3519234 => 'NOS',
351924 => 'MEO',
351925 => 'MEO',
351926 => 'MEO',
351927 => 'MEO',
@@ -43,6 +54,7 @@ return array (
3519292 => 'NOS',
3519293 => 'NOS',
3519294 => 'NOS',
3519295 => 'Sumamovil Portugal',
35193 => 'NOS',
35196 => 'MEO',
);

View File

@@ -16,5 +16,31 @@ return array (
35386 => 'O2',
35387 => 'Vodafone',
35388 => 'eMobile',
35389 => 'Tesco Mobile',
353890 => 'Tesco Mobile',
3538900 => 'Eircom',
353891 => 'Tesco Mobile',
353892 => 'Liffey Telecom',
3538928 => 'Tesco Mobile',
3538929 => 'Tesco Mobile',
353893 => 'Tesco Mobile',
353894 => 'Liffey Telecom',
353895 => '3',
353896 => 'Tesco Mobile',
3538960 => 'Virgin Media',
3538961 => 'Virgin Media',
3538962 => 'Virgin Media',
353897 => 'Tesco Mobile',
3538970 => 'Carphone Warehouse Ireland Mobile Limited',
3538971 => 'Carphone Warehouse Ireland Mobile Limited',
353898 => 'Tesco Mobile',
3538990 => 'Tesco Mobile',
3538991 => 'Tesco Mobile',
3538992 => 'Tesco Mobile',
3538993 => 'Tesco Mobile',
3538994 => 'Lycamobile',
3538995 => 'Lycamobile',
3538996 => 'Lycamobile',
3538997 => 'Lycamobile',
3538998 => 'Lycamobile',
3538999 => 'Tesco Mobile',
);

View File

@@ -14,17 +14,11 @@ return array (
354385 => 'Síminn',
354388 => 'IMC',
354389 => 'IMC',
354611 => 'Tal',
354612 => 'Tal',
354613 => 'Tal',
354614 => 'Tal',
354615 => 'Vodafone',
354616 => 'Vodafone',
354617 => 'Vodafone',
354618 => 'Vodafone',
35461 => 'Vodafone',
35462 => 'Vodafone',
354630 => 'IMC',
354632 => 'Tismi',
354636 => 'Öryggisfjarskipti',
354637 => 'Öryggisfjarskipti',
354638 => 'Öryggisfjarskipti',
354639 => 'Öryggisfjarskipti',
@@ -40,7 +34,10 @@ return array (
354659 => 'Vodafone',
35466 => 'Vodafone',
35467 => 'Vodafone',
35468 => 'Vodafone',
354680 => 'Vodafone',
354686 => 'Vodafone',
354687 => 'Vodafone',
354688 => 'Vodafone',
35469 => 'Vodafone',
354750 => 'Síminn',
354755 => 'Síminn',
@@ -55,6 +52,7 @@ return array (
35485 => 'Síminn',
35486 => 'Síminn',
354882 => 'Síminn',
354883 => 'Síminn',
354888 => 'Síminn',
35489 => 'Síminn',
);

View File

@@ -14,10 +14,10 @@ return array (
35672 => 'GO Mobile',
35677 => 'Melita Mobile',
35679 => 'GO Mobile',
35692 => 'Vodafone',
35696 => 'YOM',
356981 => 'Redtouch Fone',
35692 => 'epic',
3569696 => 'epic',
356981 => 'Melita Mobile',
356988 => 'GO Mobile',
356989 => 'Vodafone',
35699 => 'Vodafone',
356989 => 'epic',
35699 => 'epic',
);

View File

@@ -11,6 +11,7 @@
*/
return array (
35791 => 'Cytamobile-Vodafone',
35794 => 'Lemontel',
35795 => 'PrimeTel',
35796 => 'MTN',

View File

@@ -16,6 +16,10 @@ return array (
35842 => 'Telia',
3584320 => 'Cuuma',
3584321 => 'Cuuma',
3584322 => 'Benemen Oy',
3584323 => 'Top Connect OU',
3584324 => 'Nord Connect SIA',
3584325 => 'NETTIA',
358436 => 'DNA',
358438 => 'DNA',
35844 => 'DNA',
@@ -44,6 +48,7 @@ return array (
358456 => 'Elisa',
3584570 => 'AMT',
3584571 => 'Tismi',
3584572 => 'Telavox AB',
3584573 => 'AMT',
3584574 => 'DNA',
3584575 => 'AMT',
@@ -53,5 +58,6 @@ return array (
3584579 => 'DNA',
358458 => 'Elisa',
35846 => 'Elisa',
35849 => 'Elisa',
35850 => 'Elisa',
);

View File

@@ -12,10 +12,27 @@
return array (
35987 => 'Vivacom',
35988 => 'Mtel',
35988 => 'A1',
35989 => 'Telenor',
359988 => 'Bob',
359989 => 'Mtel',
359996 => 'Bulsatcom',
359999 => 'MAX',
359989 => 'A1',
3599960 => 'A1',
3599961 => 'A1',
3599962 => 'A1',
3599964 => 'Telenor',
3599965 => 'Telenor',
3599966 => 'Telenor',
3599967 => 'Vivacom',
3599968 => 'Vivacom',
3599969 => 'Vivacom',
3599990 => 'A1',
3599991 => 'A1',
3599992 => 'A1',
3599993 => 'A1',
3599994 => 'Telenor',
3599995 => 'Telenor',
3599996 => 'Vivacom',
3599997 => 'Vivacom',
3599998 => 'Vivacom',
3599999 => 'Vivacom',
);

View File

@@ -11,7 +11,58 @@
*/
return array (
3620 => 'Telenor',
3630 => 'T-Mobile',
3620 => 'Yettel Hungary',
3630 => 'Magyar Telekom',
36312000 => 'Netfone Telecom',
36312001 => 'Netfone Telecom',
3631310 => 'Vodafone',
3631311 => 'Vodafone',
3631312 => 'Vodafone',
3631313 => 'Vodafone',
3631314 => 'Vodafone',
3631315 => 'Vodafone',
3631316 => 'Vodafone',
3631317 => 'Vodafone',
3631318 => 'Vodafone',
36313190 => 'Vodafone',
36313191 => 'Vodafone',
36313192 => 'Vodafone',
36313193 => 'Vodafone',
36313194 => 'Vodafone',
36313195 => 'Vodafone',
36313196 => 'Vodafone',
36313197 => 'Vodafone',
36313199 => 'Vodafone',
3631320 => 'Vodafone',
3631321 => 'Vodafone',
3631322 => 'Vodafone',
3631323 => 'Vodafone',
3631324 => 'Vodafone',
3631325 => 'Vodafone',
3631326 => 'Vodafone',
3631327 => 'Vodafone',
3631328 => 'Vodafone',
36313290 => 'Vodafone',
36313291 => 'Vodafone',
36313292 => 'Vodafone',
3631330 => 'Vodafone',
3631331 => 'Vodafone',
3631332 => 'Vodafone',
36313330 => 'Vidanet',
36313331 => 'Vidanet',
36313666 => 'Vodafone',
36317000 => 'TARR',
36317001 => 'TARR',
36317002 => 'TARR',
36317003 => 'TARR',
36317004 => 'TARR',
3631770 => 'UPC',
3631771 => 'UPC',
363178 => 'UPC',
3631790 => 'UPC',
36501 => 'DIGI',
36502 => 'DIGI',
36508 => 'MVM Net',
36509 => 'MVM Net',
3670 => 'Vodafone',
);

View File

@@ -12,8 +12,9 @@
return array (
37060 => 'Tele 2',
37061 => 'Omnitel',
37062 => 'Omnitel',
37061 => 'Telia',
37062 => 'Telia',
37063 => 'BITĖ',
37064 => 'BITĖ',
370645 => 'Tele 2',
370646 => 'Tele 2',
@@ -21,25 +22,110 @@ return array (
370648 => 'Tele 2',
37065 => 'BITĖ',
370660 => 'BITĖ',
370662 => 'Omnitel',
370661 => 'BITĖ',
3706610 => 'Tele 2',
370662 => 'Telia',
3706630 => 'Telia',
37066313 => 'BITĖ',
37066314 => 'BITĖ',
37066315 => 'BITĖ',
37066316 => 'BITĖ',
37066317 => 'BITĖ',
37066318 => 'BITĖ',
37066319 => 'BITĖ',
37066320 => 'BITĖ',
37066323 => 'BITĖ',
3706650 => 'Telia',
3706651 => 'Telia',
37066522 => 'Telia',
37066523 => 'Telia',
37066524 => 'Telia',
37066525 => 'Telia',
37066526 => 'Telia',
37066527 => 'Telia',
37066528 => 'Telia',
37066529 => 'Telia',
3706653 => 'Telia',
3706660 => 'BITĖ',
3706661 => 'BITĖ',
37066621 => 'Telia',
37066622 => 'BITĖ',
37066623 => 'BITĖ',
37066624 => 'BITĖ',
37066625 => 'BITĖ',
37066626 => 'BITĖ',
37066627 => 'BITĖ',
37066628 => 'BITĖ',
37066629 => 'BITĖ',
3706663 => 'Telia',
3706664 => 'Telia',
3706665 => 'BITĖ',
3706666 => 'Tele 2',
3706667 => 'BITĖ',
3706668 => 'BITĖ',
3706669 => 'BITĖ',
3706670 => 'BITĖ',
37066711 => 'BITĖ',
37066719 => 'BITĖ',
37066728 => 'BITĖ',
37066729 => 'BITĖ',
3706676 => 'BITĖ',
3706677 => 'BITĖ',
3706678 => 'BITĖ',
3706679 => 'BITĖ',
3706680 => 'Tele 2',
37066839 => 'Tele 2',
37066840 => 'Tele 2',
37066841 => 'Tele 2',
37066842 => 'Tele 2',
37066860 => 'Tele 2',
37066861 => 'Tele 2',
37066862 => 'Tele 2',
37066863 => 'Tele 2',
37066864 => 'Tele 2',
37066865 => 'Tele 2',
37066876 => 'BITĖ',
37066877 => 'BITĖ',
370669 => 'Telia',
37067 => 'Tele 2',
370680 => 'Omnitel',
370680 => 'Telia',
370681 => 'BITĖ',
370682 => 'Omnitel',
370682 => 'Telia',
370683 => 'Tele 2',
370684 => 'Tele 2',
370685 => 'BITĖ',
370686 => 'Omnitel',
370687 => 'Omnitel',
370688 => 'Omnitel',
370686 => 'Telia',
370687 => 'Telia',
370688 => 'Telia',
370689 => 'BITĖ',
370690 => 'BITĖ',
370692 => 'Omnitel',
370693 => 'Omnitel',
370694 => 'Omnitel',
370695 => 'Omnitel',
370696 => 'Omnitel',
370697 => 'Omnitel',
370698 => 'Omnitel',
370691 => 'BITĖ',
370692 => 'Telia',
370693 => 'Telia',
370694 => 'Telia',
370695 => 'Telia',
370696 => 'Telia',
3706970 => 'Telia',
3706971 => 'Telia',
3706972 => 'Telia',
3706973 => 'Telia',
37069740 => 'Telia',
37069741 => 'Telia',
37069742 => 'BITĖ',
37069743 => 'BITĖ',
37069744 => 'Telia',
37069747 => 'Telia',
37069748 => 'Telia',
37069749 => 'Telia',
3706975 => 'Telia',
37069760 => 'Telia',
37069761 => 'Telia',
37069762 => 'Telia',
37069763 => 'Telia',
37069764 => 'Telia',
37069765 => 'Telia',
3706977 => 'Telia',
3706979 => 'Telia',
370698 => 'Telia',
370699 => 'BITĖ',
);

View File

@@ -0,0 +1,195 @@
<?php
/**
* This file has been @generated by a phing task by {@link GeneratePhonePrefixData}.
* See [README.md](README.md#generating-data) for more information.
*
* Pull requests changing data in these files will not be accepted. See the
* [FAQ in the README](README.md#problems-with-invalid-numbers] on how to make
* metadata changes.
*
* Do not modify this file directly!
*/
return array (
371200 => 'Tele2',
3712010 => 'Bite Latvia',
3712011 => 'Bite Latvia',
3712012 => 'Bite Latvia',
3712013 => 'Bite Latvia',
3712014 => 'Bite Latvia',
3712015 => 'Bite Latvia',
3712016 => 'Bite Latvia',
3712017 => 'Bite Latvia',
3712019 => 'Bite Latvia',
371202 => 'LMT',
371203 => 'Tele2',
371204 => 'Tele2',
371205 => 'Tele2',
371206 => 'Bite Latvia',
371207 => 'Bite Latvia',
3712080 => 'Bite Latvia',
3712081 => 'Bite Latvia',
3712082 => 'Bite Latvia',
3712083 => 'Bite Latvia',
3712084 => 'Bite Latvia',
3712085 => 'Bite Latvia',
3712086 => 'Bite Latvia',
3712087 => 'Bite Latvia',
3712088 => 'Bite Latvia',
3712094 => 'Triatel',
37121 => 'Bite Latvia',
3712200 => 'LMT',
3712201 => 'LMT',
3712202 => 'LMT',
3712203 => 'LMT',
3712204 => 'LMT',
3712205 => 'Bite Latvia',
3712206 => 'Bite Latvia',
3712207 => 'Bite Latvia',
3712208 => 'Bite Latvia',
3712209 => 'Bite Latvia',
371221 => 'Bite Latvia',
371222 => 'Bite Latvia',
371223 => 'Tele2',
3712239 => 'Bite Latvia',
371224 => 'LMT',
371225 => 'Bite Latvia',
3712266 => 'LMT',
3712267 => 'Tele2',
3712272 => 'Bite Latvia',
3712277 => 'LMT',
3712280 => 'Bite Latvia',
3712281 => 'Bite Latvia',
3712282 => 'Bite Latvia',
3712283 => 'Bite Latvia',
3712284 => 'Bite Latvia',
3712285 => 'UNISTARS',
3712286 => 'Triatel',
3712287 => 'Triatel',
3712288 => 'LMT',
3712299 => 'LMT',
371230 => 'Bite Latvia',
37123100 => 'Bite Latvia',
3712311 => 'Bite Latvia',
3712317 => 'Bite Latvia',
3712320 => 'Bite Latvia',
3712322 => 'Bite Latvia',
37123230 => 'Tele2',
37123232 => 'Tele2',
37123233 => 'Tele2',
37123238 => 'Tele2',
3712327 => 'Bite Latvia',
3712328 => 'LMT',
3712330 => 'Bite Latvia',
3712333 => 'Tele2',
3712337 => 'Bite Latvia',
37123400 => 'Bite Latvia',
37123402 => 'Tele2',
37123444 => 'Bite Latvia',
37123456 => 'Tele2',
3712347 => 'Bite Latvia',
37123500 => 'Bite Latvia',
3712355 => 'Bite Latvia',
3712357 => 'Bite Latvia',
3712366 => 'Bite Latvia',
3712377 => 'Bite Latvia',
3712388 => 'Bite Latvia',
3712399 => 'Bite Latvia',
3712400 => 'Bite Latvia',
3712411 => 'Bite Latvia',
3712420 => 'Bite Latvia',
3712422 => 'Bite Latvia',
3712424 => 'Bite Latvia',
3712433 => 'Bite Latvia',
3712440 => 'Bite Latvia',
3712442 => 'Bite Latvia',
3712444 => 'LMT',
3712450 => 'Bite Latvia',
3712455 => 'Bite Latvia',
3712460 => 'Bite Latvia',
3712466 => 'Bite Latvia',
3712477 => 'Bite Latvia',
3712478 => 'Tele2',
3712479 => 'Tele2',
371248 => 'Tele2',
3712488 => 'Bite Latvia',
371249 => 'Tele2',
3712499 => 'Bite Latvia',
3712500 => 'Bite Latvia',
371251 => 'Bite Latvia',
371252 => 'Tele2',
371253 => 'Tele2',
371254 => 'LMT',
371255 => 'Bite Latvia',
3712556 => 'LMT',
3712557 => 'LMT',
3712558 => 'LMT',
3712559 => 'LMT',
371256 => 'LMT',
371257 => 'LMT',
371258 => 'Triatel',
3712585 => 'Bite Latvia',
3712586 => 'Bite Latvia',
3712587 => 'Bite Latvia',
3712588 => 'Bite Latvia',
371259 => 'Tele2',
37126 => 'LMT',
371260 => 'Tele2',
371267 => 'Tele2',
371268 => 'Tele2',
371269 => 'Tele2',
371270 => 'Tele2',
371271 => 'Tele2',
3712720 => 'Bite Latvia',
3712721 => 'Bite Latvia',
3712722 => 'Bite Latvia',
3712723 => 'Bite Latvia',
3712724 => 'Bite Latvia',
3712725 => 'Bite Latvia',
3712726 => 'Tele2',
3712727 => 'Bite Latvia',
3712729 => 'LMT',
371273 => 'LMT',
371274 => 'Bite Latvia',
371275 => 'Bite Latvia',
3712760 => 'Bite Latvia',
3712761 => 'Bite Latvia',
3712762 => 'Bite Latvia',
3712763 => 'Bite Latvia',
3712764 => 'Bite Latvia',
3712765 => 'Bite Latvia',
3712766 => 'Bite Latvia',
3712767 => 'Bite Latvia',
371277 => 'Bite Latvia',
3712777 => 'LMT',
371278 => 'LMT',
3712790 => 'LMT',
3712792 => 'Bite Latvia',
3712799 => 'Bite Latvia',
371280 => 'LMT',
371281 => 'Tele2',
371282 => 'Tele2',
371283 => 'LMT',
3712844 => 'Tele2',
3712845 => 'Tele2',
3712846 => 'Tele2',
3712847 => 'Tele2',
3712848 => 'Tele2',
3712849 => 'LMT',
3712855 => 'Bite Latvia',
371286 => 'LMT',
371287 => 'LMT',
371288 => 'Tele2',
371289 => 'Tele2',
3712900 => 'Bite Latvia',
3712902 => 'Bite Latvia',
371291 => 'LMT',
371292 => 'LMT',
371293 => 'LMT',
371294 => 'LMT',
371295 => 'Tele2',
371296 => 'Tele2',
371297 => 'Tele2',
371298 => 'Tele2',
371299 => 'Tele2',
);

View File

@@ -11,20 +11,64 @@
*/
return array (
37250 => 'EMT',
372519 => 'EMT',
37252 => 'EMT',
372530 => 'EMT',
372533 => 'EMT',
372534 => 'EMT',
372536 => 'EMT',
372537 => 'EMT',
372538 => 'EMT',
372539 => 'EMT',
37250 => 'Telia Eesti AS',
372519 => 'Telia Eesti AS',
37252 => 'Telia Eesti AS',
372530 => 'Telia Eesti AS',
372533 => 'Telia Eesti AS',
372534 => 'Telia Eesti AS',
372536 => 'Telia Eesti AS',
372537 => 'Telia Eesti AS',
372538 => 'Telia Eesti AS',
372539 => 'Telia Eesti AS',
37254 => 'Telia Eesti AS',
372545 => 'Elisa',
3725461 => 'Elisa',
3725462 => 'Elisa',
3725463 => 'Elisa',
37254664 => 'Elisa',
37254665 => 'Elisa',
37254667 => 'Elisa',
37254668 => 'Elisa',
37254669 => 'Elisa',
37255 => 'Tele 2',
37256 => 'Elisa',
372577 => 'Elisa',
37257 => 'Telia Eesti AS',
37258 => 'Tele 2',
372590 => 'EMT',
372589 => 'Elisa',
37259 => 'Telia Eesti AS',
37259120 => 'Tele 2',
37259121 => 'Tele 2',
37259140 => 'Tele 2',
372591410 => 'Tele 2',
372591411 => 'Tele 2',
372591412 => 'Tele 2',
372591413 => 'Tele 2',
37259144 => 'Tele 2',
37281 => 'Telia Eesti AS',
3728110 => 'Tele 2',
3728111 => 'Elisa',
37282 => 'Elisa',
3728200 => 'Telia Eesti AS',
3728203 => 'Telia Eesti AS',
3728204 => 'Tele 2',
37282056 => 'Tele 2',
37282057 => 'Tele 2',
37282058 => 'Tele 2',
37282059 => 'Tele 2',
3728206 => 'Tele 2',
3728216 => 'Tele 2',
3728217 => 'Tele 2',
3728218 => 'Tele 2',
37282199 => 'Tele 2',
3728273 => 'Tele 2',
3728282 => 'Telia Eesti AS',
3728285 => 'Tele 2',
3728286 => 'Tele 2',
3728287 => 'Tele 2',
37283 => 'Tele 2',
37284 => 'Tele 2',
37284510 => 'Telia Eesti AS',
37284511 => 'Telia Eesti AS',
37284512 => 'Telia Eesti AS',
);

View File

@@ -17,25 +17,16 @@ return array (
373611 => 'Orange',
373620 => 'Orange',
373621 => 'Orange',
373671 => 'Moldtelecom',
373672 => 'Moldtelecom',
373673 => 'Moldtelecom',
373674 => 'Moldtelecom',
373675 => 'Moldtelecom',
373676 => 'Moldtelecom',
373677 => 'Moldtelecom',
37367 => 'Moldtelecom',
37368 => 'Orange',
37369 => 'Orange',
37376 => 'Moldcell',
37377 => 'IDC',
373780 => 'Moldcell',
373781 => 'Moldcell',
373782 => 'Moldcell',
373783 => 'Moldcell',
373784 => 'Moldcell',
373785 => 'Moldcell',
373786 => 'Moldcell',
373787 => 'Moldcell',
373788 => 'Moldcell',
373774 => 'IDC',
373775 => 'IDC',
373776 => 'IDC',
373777 => 'IDC',
373778 => 'IDC',
373779 => 'IDC',
37378 => 'Moldcell',
37379 => 'Moldcell',
);

View File

@@ -11,6 +11,7 @@
*/
return array (
37433 => 'Beeline',
37441 => 'Ucom',
37443 => 'Beeline',
37444 => 'Ucom',

View File

@@ -12,4 +12,6 @@
return array (
3763 => 'Mobiland',
3765 => 'Mobiland',
3766 => 'Mobiland',
);

View File

@@ -0,0 +1,17 @@
<?php
/**
* This file has been @generated by a phing task by {@link GeneratePhonePrefixData}.
* See [README.md](README.md#generating-data) for more information.
*
* Pull requests changing data in these files will not be accepted. See the
* [FAQ in the README](README.md#problems-with-invalid-numbers] on how to make
* metadata changes.
*
* Do not modify this file directly!
*/
return array (
3773 => 'Monaco Telecom',
3774 => 'Monaco Telecom',
3776 => 'Monaco Telecom',
);

View File

@@ -0,0 +1,16 @@
<?php
/**
* This file has been @generated by a phing task by {@link GeneratePhonePrefixData}.
* See [README.md](README.md#generating-data) for more information.
*
* Pull requests changing data in these files will not be accepted. See the
* [FAQ in the README](README.md#problems-with-invalid-numbers] on how to make
* metadata changes.
*
* Do not modify this file directly!
*/
return array (
37861 => 'TELENET',
37866 => 'Telecom Italia San Marino',
);

View File

@@ -11,7 +11,7 @@
*/
return array (
38039 => 'Golden Telecom',
38039 => 'Kyivstar',
38050 => 'Vodafone',
38063 => 'lifecell',
38066 => 'Vodafone',

View File

@@ -15,9 +15,10 @@ return array (
38161 => 'VIP',
38162 => 'Telenor',
38163 => 'Telenor',
38164 => 'mts',
38165 => 'mts',
38166 => 'mts',
38164 => 'Telekom Srbija a.d.',
38165 => 'Telekom Srbija a.d.',
38166 => 'Telekom Srbija a.d.',
381676 => 'GLOBALTEL',
381677 => 'GLOBALTEL',
381678 => 'Vectone Mobile',
38168 => 'VIP',

View File

@@ -12,9 +12,6 @@
return array (
38343 => 'IPKO',
383432 => 'D3 Mobile',
383433 => 'D3 Mobile',
383434 => 'D3 Mobile',
38344 => 'vala',
383451 => 'vala',
383452 => 'vala',
@@ -26,11 +23,7 @@ return array (
383458 => 'vala',
383459 => 'vala',
383461 => 'Z Mobile',
3834710 => 'mts d.o.o.',
3834711 => 'mts d.o.o.',
3834712 => 'mts d.o.o.',
3834713 => 'mts d.o.o.',
3834714 => 'mts d.o.o.',
3834715 => 'mts d.o.o.',
38347 => 'mts d.o.o.',
38348 => 'IPKO',
38349 => 'IPKO',
);

Some files were not shown because too many files have changed in this diff Show More