giggsey / libphonenumber-for-php

PHP version of Google's phone number handling library
https://giggsey.com/libphonenumber/
Apache License 2.0
4.73k stars 464 forks source link

Missing or invalid default region. #628

Closed DesRodman closed 4 months ago

DesRodman commented 4 months ago

Hello

I tried to use you extension for my project, but my first test shown the error - Missing or invalid default region.

php yii daemon/check-phone-lib

Exception 'libphonenumber\NumberParseException' with message 'Missing or invalid default region.'

in /var/www/smpp-engine/vendor/giggsey/libphonenumber-for-php/src/PhoneNumberUtil.php:1682

Stack trace:

0 /var/www/smpp-engine/vendor/giggsey/libphonenumber-for-php/src/PhoneNumberUtil.php(3182): libphonenumber\PhoneNumberUtil->parseHelper()

1 /var/www/smpp-engine/console/controllers/DaemonController.php(2457): libphonenumber\PhoneNumberUtil->parse()

2 [internal function]: console\controllers\DaemonController->actionCheckPhoneLib()

3 /var/www/smpp-engine/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()

4 /var/www/smpp-engine/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams()

5 /var/www/smpp-engine/vendor/yiisoft/yii2/console/Controller.php(180): yii\base\Controller->runAction()

6 /var/www/smpp-engine/vendor/yiisoft/yii2/base/Module.php(552): yii\console\Controller->runAction()

7 /var/www/smpp-engine/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction()

8 /var/www/smpp-engine/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction()

9 /var/www/smpp-engine/vendor/yiisoft/yii2/base/Application.php(384): yii\console\Application->handleRequest()

10 /var/www/smpp-engine/yii(27): yii\base\Application->run()

here is my code example

    public function actionCheckPhoneLib()
    {
        $internationalPhoneNumber = 380660000000;
        $phoneNumberUtil = PhoneNumberUtil::getInstance();
// Parse the international phone number
        $phoneNumber = $phoneNumberUtil->parse($internationalPhoneNumber, null);
// Get the country code (MCC)
        $countryCode = $phoneNumber->getCountryCode();
// Get the network code (MNC) if available
        $mnc = $phoneNumberUtil->getMetadataForRegion($phoneNumberUtil->getRegionCodeForNumber($phoneNumber))->getMnc($phoneNumber);
    }

even when function parse has default value for second params - $defaultRegion = null, this function cant use this param with default value

  public function parse($numberToParse, $defaultRegion = null, PhoneNumber $phoneNumber = null, $keepRawInput = false)

In total case, in my project - number can be from any country of the world, so I cant know the region before making check it by own.

so your extension cant give me full info (main for me MCC & MNC), without region info?

giggsey commented 4 months ago

https://github.com/giggsey/libphonenumber-for-php/blob/master/docs/PhoneNumberUtil.md#parse

For region to be null, your phone number provided must be in an international format. Otherwise the library doesn't know which region the number could belong to.

DesRodman commented 4 months ago

so, I see - I set the number in international format, but without a plus

    public function actionCheckPhoneLib()
    {
        $internationalPhoneNumber = '+380660000000';
        $phoneNumberUtil = PhoneNumberUtil::getInstance();
// Parse the international phone number
        $phoneNumber = $phoneNumberUtil->parse($internationalPhoneNumber);
// Get the country code (MCC)
        $countryCode = $phoneNumber->getCountryCode();
// Get the network code (MNC) if available
        $mnc = $phoneNumberUtil->getMetadataForRegion($phoneNumberUtil->getRegionCodeForNumber($phoneNumber))->getMnc($phoneNumber);
    }

here is I added the plus in code but now I have a new error 'Call to undefined method libphonenumber\PhoneMetadata::getMnc()' but the number is real mobile. and PhpStorm also shows me a problem with method getMnc (method cant be find)

php yii daemon/check-phone-lib

Exception 'Error' with message 'Call to undefined method libphonenumber\PhoneMetadata::getMnc()'

in /var/www/smpp-engine/console/controllers/DaemonController.php:2463

Stack trace:

0 [internal function]: console\controllers\DaemonController->actionCheckPhoneLib()

1 /var/www/smpp-engine/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()

2 /var/www/smpp-engine/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams()

3 /var/www/smpp-engine/vendor/yiisoft/yii2/console/Controller.php(180): yii\base\Controller->runAction()

4 /var/www/smpp-engine/vendor/yiisoft/yii2/base/Module.php(552): yii\console\Controller->runAction()

5 /var/www/smpp-engine/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction()

6 /var/www/smpp-engine/vendor/yiisoft/yii2/console/Application.php(147): yii\console\Application->runAction()

7 /var/www/smpp-engine/vendor/yiisoft/yii2/base/Application.php(384): yii\console\Application->handleRequest()

8 /var/www/smpp-engine/yii(27): yii\base\Application->run()

9 {main}

kindly help me - is it possible to use your lib for get MCC + MNC of the number?

giggsey commented 4 months ago

See #110 about MCC + MNC.