Una biblioteca PHP para analizar, formatear, almacenar y validar números de teléfono internacionales. Esta biblioteca se basa en el número de teléfono de biblioteca de Google.
Actualmente se admiten las versiones de PHP 7.4 a PHP 8.4.
Se requiere la extensión PECL mbstring.
Se recomienda utilizar Composer para instalar la biblioteca.
composer require giggsey/libphonenumber-for-php
También puede utilizar cualquier otro cargador automático compatible con PSR-4.
Si no utiliza Composer, asegúrese de cargar también cualquier dependencia que tenga este proyecto, como giggsey/locale.
Si solo desea utilizar la funcionalidad principal de PhoneNumber Util, puede usar giggsey/libphonenumber-for-php-lite, que ofrece un tamaño de paquete mucho más pequeño.
Hay una demostración en línea disponible y la fuente se puede encontrar en giggsey/libphonenumber-example.
getNumberType
: obtiene el tipo de número basándose en el número mismo; capaz de distinguir números de línea fija, móvil, gratuito, tarifa premium, costo compartido, VoIP y personales (cuando sea posible).isNumberMatch
: obtiene un nivel de confianza sobre si dos números podrían ser iguales.getExampleNumber
/ getExampleNumberByType
: proporciona números de ejemplo válidos para todos los países/regiones, con la opción de especificar qué tipo de número de teléfono de ejemplo se necesita.isValidNumber
: validación completa de un número de teléfono para una región utilizando información de longitud y prefijo.PhoneNumberOfflineGeocoder
: proporciona información geográfica relacionada con un número de teléfono.PhoneNumberToTimeZonesMapper
: proporciona información de zona horaria relacionada con un número de teléfono.PhoneNumberToCarrierMapper
: proporciona información del operador relacionada con un número de teléfono. Esta biblioteca intentará seguir los mismos números de versión que Google. Podría haber versiones adicionales cuando sea necesario para solucionar problemas críticos que no pueden esperar hasta la próxima versión de Google.
Esto significa que es posible que este proyecto no siga el control de versiones semántico, sino la política de versiones de Google. Como resultado, es posible que los saltos en las versiones principales no contengan cambios incompatibles con versiones anteriores. Lea las notas de la versión de dichas versiones.
Google intenta publicar sus versiones de acuerdo con el control de versiones semántico, como se establece en su Guía de control de versiones.
Digamos que tienes una cadena que representa un número de teléfono de Suiza. Así es como lo analizas/normalizas en un 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 );
}
En este punto, swissNumberProto contiene:
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
}
Ahora validemos si el número es válido:
$ isValid = $ phoneUtil -> isValidNumber ( $ swissNumberProto );
var_dump ( $ isValid ); // true
Hay algunos formatos admitidos por el método de formateo, como se ilustra a continuación:
// 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 );
También puedes optar por formatear el número de la forma en que se marca desde otro 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 utiliza metadatos de números de teléfono de libphonenumber de Google. Si esta biblioteca funciona según lo previsto, debería proporcionar el mismo resultado que la versión Java del proyecto de Google.
Si cree que un número de teléfono arroja un resultado incorrecto, primero pruébelo con libphonenumber a través de su demostración en línea. Si eso arroja el mismo resultado que este proyecto y cree que es un error, plantéelo como un problema con el proyecto libphonenumber.
Si la demostración en línea de Google proporciona un resultado diferente al de la demostración libphonenumber-for-php, plantee un problema aquí.
Normalmente no es necesario generar los datos, ya que este repositorio generalmente siempre tendrá los metadatos de datos actualizados.
Si necesita generar los datos, los comandos los proporciona Phing. Asegúrese de tener todas las dependencias de Dev Composer instaladas y luego ejecute
vendor/bin/phing compile
Este proceso de compilación clona el proyecto libphonenumber en la versión especificada en METADATA-VERSION.txt.
Este proyecto utiliza PHPUnit Bridge para mantener la compatibilidad con las versiones de PHP compatibles.
Para ejecutar las pruebas localmente, ejecute el script ./phpunit
.
Existen otros paquetes que integran libphonenumber-for-php en marcos.
Estructura | Paquetes |
---|---|
Symfony | Número De TeléfonoPaquete |
Laravel | Teléfono Laravel |
yii2 | Entrada telefónica |
kohana | Número de teléfono |
TIPO3 | Extensión de teléfono TYPO3 |
Estos paquetes son suministrados por terceros y no se puede garantizar su calidad.