All Projects → giggsey → Libphonenumber For Php

giggsey / Libphonenumber For Php

Licence: apache-2.0
PHP version of Google's phone number handling library

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to Libphonenumber For Php

Intl Tel Input
A JavaScript plugin for entering and validating international telephone numbers
Stars: ✭ 5,963 (+51.42%)
Mutual labels:  phone-number, libphonenumber
international-telephone-input
Integration to Magento 2 a jQuery plugin for entering and validating international telephone numbers.
Stars: ✭ 26 (-99.34%)
Mutual labels:  phone-number, libphonenumber
intl-tel-input-rails
intl-tel-input for the Rails asset pipeline
Stars: ✭ 35 (-99.11%)
Mutual labels:  phone-number, libphonenumber
Schema Generator
PHP Model Scaffolding from Schema.org and other RDF vocabularies
Stars: ✭ 379 (-90.38%)
Mutual labels:  hacktoberfest
Packagedev
Tools to ease the creation of snippets, syntax definitions, etc. for Sublime Text.
Stars: ✭ 378 (-90.4%)
Mutual labels:  hacktoberfest
Ejml
A fast and easy to use linear algebra library written in Java for dense, sparse, real, and complex matrices.
Stars: ✭ 378 (-90.4%)
Mutual labels:  hacktoberfest
Zacs
Zero Abstraction Cost Styling ⚡️👨‍🎨 (for React DOM & React Native)
Stars: ✭ 385 (-90.22%)
Mutual labels:  hacktoberfest
Ava
Node.js test runner that lets you develop with confidence 🚀
Stars: ✭ 19,458 (+394.11%)
Mutual labels:  hacktoberfest
Onedal
oneAPI Data Analytics Library (oneDAL)
Stars: ✭ 382 (-90.3%)
Mutual labels:  hacktoberfest
Pypng
Pure Python library for PNG image encoding/decoding
Stars: ✭ 380 (-90.35%)
Mutual labels:  hacktoberfest
Pext
Python-based extendable tool
Stars: ✭ 380 (-90.35%)
Mutual labels:  hacktoberfest
Deno Nessie
A modular Deno library for PostgreSQL, MySQL, MariaDB and SQLite migrations
Stars: ✭ 381 (-90.33%)
Mutual labels:  hacktoberfest
Nanovna Saver
A tool for reading, displaying and saving data from the NanoVNA
Stars: ✭ 382 (-90.3%)
Mutual labels:  hacktoberfest
Nusmods
🏫 Official course planning platform for National University of Singapore.
Stars: ✭ 379 (-90.38%)
Mutual labels:  hacktoberfest
Fullstaq Ruby Server Edition
A server-optimized Ruby distribution: less memory, faster, easy to install and security-patch via APT/YUM
Stars: ✭ 384 (-90.25%)
Mutual labels:  hacktoberfest
React Navigation
Routing and navigation for your React Native apps
Stars: ✭ 20,650 (+424.38%)
Mutual labels:  hacktoberfest
Date Io
Abstraction over common javascript date management libraries
Stars: ✭ 382 (-90.3%)
Mutual labels:  hacktoberfest
Openwisp Controller
Network and WiFi controller: provisioning, configuration management and updates, (pull via openwisp-config or push via SSH), x509 PKI management and more. Mainly OpenWRT, but designed to work also on other systems.
Stars: ✭ 377 (-90.43%)
Mutual labels:  hacktoberfest
Memento
Memento is a development-only tool that caches HTTP calls once they have been executed.
Stars: ✭ 380 (-90.35%)
Mutual labels:  hacktoberfest
Gpozaurr
Group Policy Eater is a PowerShell module that aims to gather information about Group Policies but also allows fixing issues that you may find in them.
Stars: ✭ 381 (-90.33%)
Mutual labels:  hacktoberfest

libphonenumber for PHP Build Status Coverage Status

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.

Installation

PHP versions 5.3 up to PHP 8.0 are currently supported.

The PECL mbstring extension is required.

It is recommended to use composer to install the library.

$ composer require giggsey/libphonenumber-for-php

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

If you do not use composer, ensure that you also load any dependencies that this project has, such as giggsey/locale.

Documentation

Online Demo

An online demo is available, and the source can be found at giggsey/libphonenumber-example.

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.
  • PhoneNumberOfflineGeocoder - provides geographical information related to a phone number.
  • PhoneNumberToTimeZonesMapper - provides timezone information related to a phone number.
  • PhoneNumberToCarrierMapper - provides carrier information related to a phone number.

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");

Geocoder

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();

$swissNumberProto = $phoneUtil->parse("044 668 18 00", "CH");
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");
$gbNumberProto = $phoneUtil->parse("0161 496 0000", "GB");

$geocoder = \libphonenumber\geocoding\PhoneNumberOfflineGeocoder::getInstance();

// Outputs "Zurich"
echo $geocoder->getDescriptionForNumber($swissNumberProto, "en_US");

// Outputs "Zürich"
echo $geocoder->getDescriptionForNumber($swissNumberProto, "de_DE");

// Outputs "Zurigo"
echo $geocoder->getDescriptionForNumber($swissNumberProto, "it_IT");

// Outputs "Mountain View, CA"
echo $geocoder->getDescriptionForNumber($usNumberProto, "en_US");

// Outputs "Mountain View, CA"
echo $geocoder->getDescriptionForNumber($usNumberProto, "de_DE");

// Outputs "미국" (Korean for United States)
echo $geocoder->getDescriptionForNumber($usNumberProto, "ko-KR");

// Outputs "Manchester"
echo $geocoder->getDescriptionForNumber($gbNumberProto, "en_GB");

// Outputs "영국" (Korean for United Kingdom)
echo $geocoder->getDescriptionForNumber($gbNumberProto, "ko-KR");

ShortNumberInfo

$shortNumberInfo = \libphonenumber\ShortNumberInfo::getInstance();

// true
var_dump($shortNumberInfo->isEmergencyNumber("999", "GB"));

// true
var_dump($shortNumberInfo->connectsToEmergencyNumber("999", "GB"));

// false
var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "GB"));

// true
var_dump($shortNumberInfo->isEmergencyNumber("911", "US"));

// true
var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "US"));

// false
var_dump($shortNumberInfo->isEmergencyNumber("911123", "US"));

// true
var_dump($shortNumberInfo->connectsToEmergencyNumber("911123", "US"));

Mapping Phone Numbers to carrier

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$swissNumberProto = $phoneUtil->parse("798765432", "CH");

$carrierMapper = \libphonenumber\PhoneNumberToCarrierMapper::getInstance();
// Outputs "Swisscom"
echo $carrierMapper->getNameForNumber($swissNumberProto, "en");

Mapping Phone Numbers to TimeZones

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$swissNumberProto = $phoneUtil->parse("798765432", "CH");

$timeZoneMapper = \libphonenumber\PhoneNumberToTimeZonesMapper::getInstance();
// returns array("Europe/Zurich")
$timeZones = $timeZoneMapper->getTimeZonesForNumber($swissNumberProto);

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 here.

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 process clones the libphonenumber project at the version specified in METADATA-VERSION.txt.

Running tests

This project uses PHPUnit Bridge to maintain compatibility for the supported PHP versions.

To run the tests locally, run the ./phpunit script.

Integration with frameworks

Other packages exist that integrate libphonenumber-for-php into frameworks.

Framework Packages
Symfony PhoneNumberBundle
Laravel Laravel Phone
Yii2 PhoneInput
Kohana PhoneNumber
TYPO3 TYPO3 Phone Extension

These packages are supplied by third parties, and their quality can not be guaranteed.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].