Coder Social home page Coder Social logo

giggsey / libphonenumber-for-php-lite Goto Github PK

View Code? Open in Web Editor NEW
27.0 2.0 4.0 16.21 MB

PHP version of Google's phone number handling library

Home Page: https://giggsey.com/libphonenumber/

License: Apache License 2.0

PHP 100.00%
hacktoberfest libphonenumber phone-number php

libphonenumber-for-php-lite's Introduction

libphonenumber for PHP (Lite) Build Status codecov Mutation testing badge

Total Downloads Downloads per month Latest Stable Version License

What is it?

A PHP library for parsing, formatting, storing and validating international phone numbers. This library is based on Google's libphonenumber.

This is a lite version that only includes the core Phone Number Utils. To make full use of the library, including geolocation, carrier information and short number info, use giggsey/libphonenumber-for-php

Installation

PHP versions 8.1 and above are supported.

The PECL mbstring extension is required.

It is recommended to use composer to install the library.

$ composer require giggsey/libphonenumber-for-php-lite

You can also use any other PSR-4 compliant autoloader.

PHP Version Policy

This library will be updated to use supported versions of PHP only. At the moment, the main giggsey/libphonenumber-for-php library supports older PHP versions.

Documentation

Highlights of functionality

  • Parsing/formatting/validating phone numbers for all countries/regions of the world.
  • getNumberType - gets the type of the number based on the number itself; able to distinguish Fixed-line, Mobile, Toll-free, Premium Rate, Shared Cost, VoIP and Personal Numbers (whenever feasible).
  • isNumberMatch - gets a confidence level on whether two numbers could be the same.
  • getExampleNumber/getExampleNumberByType - provides valid example numbers for all countries/regions, with the option of specifying which type of example phone number is needed.
  • isValidNumber - full validation of a phone number for a region using length and prefix information.

Versioning

This library will try to follow the same version numbers as Google. There could be additional releases where needed to fix critical issues that can not wait until the next release from Google.

This does mean that this project may not follow Semantic Versioning, 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.

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:

$swissNumberStr = "044 668 18 00";
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
try {
    $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
    var_dump($swissNumberProto);
} catch (\libphonenumber\NumberParseException $e) {
    var_dump($e);
}

At this point, swissNumberProto contains:

class libphonenumber\PhoneNumber#9 (7) {
 private $countryCode =>
  int(41)
 private $nationalNumber =>
  double(446681800)
 private $extension =>
  NULL
 private $italianLeadingZero =>
  NULL
 private $rawInput =>
  NULL
 private $countryCodeSource =>
  NULL
 private $preferredDomesticCarrierCode =>
  NULL
}

Now let us validate whether the number is valid:

$isValid = $phoneUtil->isValidNumber($swissNumberProto);
var_dump($isValid); // true

There are a few formats supported by the formatting method, as illustrated below:

// Produces "+41446681800"
echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164);

// Produces "044 668 18 00"
echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::NATIONAL);

// Produces "+41 44 668 18 00"
echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);

You could also choose to format the number in the way it is dialled from another country:

// Produces "011 41 44 668 1800", the number when it is dialled in the United States.
echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "US");

// Produces "00 41 44 668 18 00", the number when it is dialled in Great Britain.
echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "GB");

FAQ

Problems with Invalid Numbers?

This library uses phone number metadata from Google's 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 via their Online Demo. 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 gives a different result to the libphonenumber-for-php demo, then please raise an Issue on the giggsey/libphonenumber-for-php project.

If giggsey/libphonenumber-for-php differs from this library, please raise an issue here instead.

Generating data

Generating the data is not normally needed, as this repository will generally always have the up to data metadata.

If you do need to generate the data, the commands are provided by Phing. Ensure you have all the dev composer dependencies installed, then run

$ vendor/bin/phing compile

This compile task clones the libphonenumber project at the version specified in METADATA-VERSION.php.

libphonenumber-for-php-lite's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

libphonenumber-for-php-lite's Issues

Incompatibility PHP8.1

Current behavior

  • PhoneNumberUtil::getInstance() create a exception when it's use without PhoneNumberUtil::resetInstance(); before , the message exception is "exception": "[object] (Error(code: 0): Typed static property libphonenumber\\PhoneNumberUtil::$instance must not be accessed before initialization at /var/task/vendor/giggsey/libphonenumber-for-php-lite/src/PhoneNumberUtil.php:387)

  • When I use PhoneNumberUtil::getInstance() function, I have a other message like that : PHP message: PHP Deprecated: Optional parameter $defaultRegionMetadata declared before required parameter $phoneNumber is implicitly treated as a required parameter in /var/task/vendor/giggsey/libphonenumber-for-php-lite/src/PhoneNumberUtil.php on line 1795

Excepted behavior

  • PhoneNumberUtil::getInstance() must be use without PhoneNumberUtil::resetInstance() first time
  • Parameter $defaultRegionMetadata should not be to have a default value

Adding ShortNumberInfo?

I have a blocker for migrating to libphonenumber-for-php-lite, which is a requirement for ShortNumberInfo.

The metadata for these files in libphonenumber is ~500KB (in comparison, PhoneNumberMetadata is ~1.1MB), and I think I can reduce that by removing empty data from the metadata (as well as the normal short arrays).

My question to the community is: should I? It'll increase the download size of the 'lite' library (current zip is ~300KB, this will go up slightly).

The alternative is creating another library just for the ShortNumberInfo, and have it require the lite package. But that comes with management overhead for me.

Improve metadata performance

Would the metadata loading be quicker & smaller if we serialised or var_exported the object itself?

Test:

  • speed
  • max memory
  • size of generated metadata

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.