Uma biblioteca PHP para analisar, formatar, armazenar e validar números de telefone internacionais. Esta biblioteca é baseada no libphonenumber do Google.
As versões 7.4 a PHP 8.4 do PHP são atualmente suportadas.
A extensão PECL mbstring é necessária.
Recomenda-se usar o compositor para instalar a biblioteca.
composer require giggsey/libphonenumber-for-php
Você também pode usar qualquer outro autoloader compatível com PSR-4.
Se você não usa o compositor, certifique-se de carregar também quaisquer dependências que este projeto tenha, como giggsey/locale.
Se você quiser apenas usar a funcionalidade principal do PhoneNumber Util, você pode usar giggsey/libphonenumber-for-php-lite, que oferece um tamanho de pacote muito menor.
Uma demonstração online está disponível e a fonte pode ser encontrada em giggsey/libphonenumber-example.
getNumberType
– obtém o tipo do número com base no próprio número; capaz de distinguir números fixos, móveis, gratuitos, tarifa premium, custos compartilhados, VoIP e pessoais (quando possível).isNumberMatch
- obtém um nível de confiança sobre se dois números podem ser iguais.getExampleNumber
/ getExampleNumberByType
– fornece números de exemplo válidos para todos os países/regiões, com a opção de especificar qual tipo de número de telefone de exemplo é necessário.isValidNumber
– validação completa de um número de telefone para uma região usando informações de comprimento e prefixo.PhoneNumberOfflineGeocoder
- fornece informações geográficas relacionadas a um número de telefone.PhoneNumberToTimeZonesMapper
- fornece informações de fuso horário relacionadas a um número de telefone.PhoneNumberToCarrierMapper
– fornece informações da operadora relacionadas a um número de telefone. Esta biblioteca tentará seguir os mesmos números de versão do Google. Pode haver lançamentos adicionais quando necessário para corrigir problemas críticos que não podem esperar até o próximo lançamento do Google.
Isso significa que este projeto pode não seguir o controle de versão semântico, mas sim a política de versão do Google. Como resultado, os saltos nas versões principais podem não conter alterações incompatíveis com versões anteriores. Por favor, leia as notas de lançamento para tais lançamentos.
O Google tenta lançar suas versões de acordo com o Versionamento Semântico, conforme estabelecido em seu Guia de Versionamento.
Digamos que você tenha uma string representando um número de telefone da Suíça. É assim que você analisa/normaliza em um objeto PhoneNumber:
$ 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 );
}
Neste ponto, swissNumberProto contém:
class libphonenumberPhoneNumber#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
}
Agora vamos validar se o número é válido:
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
Existem alguns formatos suportados pelo método de formatação, conforme ilustrado abaixo:
// 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 );
Você também pode optar por formatar o número da mesma forma que ele é discado de outro país:
// 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 " );
$ 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 = libphonenumbergeocoding 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 = 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 " ));
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 798765432 " , " CH " );
$ carrierMapper = libphonenumber PhoneNumberToCarrierMapper :: getInstance ();
// Outputs "Swisscom"
echo $ carrierMapper -> getNameForNumber ( $ swissNumberProto , " en " );
$ phoneUtil = libphonenumber PhoneNumberUtil :: getInstance ();
$ swissNumberProto = $ phoneUtil -> parse ( " 798765432 " , " CH " );
$ timeZoneMapper = libphonenumber PhoneNumberToTimeZonesMapper :: getInstance ();
// returns array("Europe/Zurich")
$ timeZones = $ timeZoneMapper -> getTimeZonesForNumber ( $ swissNumberProto );
Esta biblioteca usa metadados de números de telefone do libphonenumber do Google. Se esta biblioteca estiver funcionando conforme o esperado, ela deverá fornecer o mesmo resultado que a versão Java do projeto do Google.
Se você acredita que um número de telefone está retornando um resultado incorreto, primeiro teste-o com libphonenumber por meio da demonstração online. Se isso retornar o mesmo resultado deste projeto e você achar que há um erro, levante-o como um problema com o projeto libphonenumber.
Se a demonstração on-line do Google fornecer um resultado diferente da demonstração libphonenumber-for-php, levante um problema aqui.
Normalmente não é necessário gerar os dados, pois esse repositório geralmente sempre terá os metadados dos dados atualizados.
Se você precisar gerar os dados, os comandos são fornecidos pelo Phing. Certifique-se de ter todas as dependências do dev compositor instaladas e execute
vendor/bin/phing compile
Este processo de compilação clona o projeto libphonenumber na versão especificada em METADATA-VERSION.txt.
Este projeto usa PHPUnit Bridge para manter a compatibilidade das versões PHP suportadas.
Para executar os testes localmente, execute o script ./phpunit
.
Existem outros pacotes que integram libphonenumber-for-php em frameworks.
Estrutura | Pacotes |
---|---|
Symfony | Pacote de número de telefone |
Laravel | Telefone Laravel |
Yii2 | Entrada de telefone |
Kohana | Número de telefone |
TIPO3 | Extensão de telefone TYPO3 |
Estas embalagens são fornecidas por terceiros e a sua qualidade não pode ser garantida.