Esta biblioteca es una versión precompilada de libphonenumber
de Google, con una interfaz un poco más simple. Ocupa un espacio mínimo: es, con diferencia, la biblioteca basada en números de teléfono más pequeña disponible en npmjs y no tiene dependencias.
A diferencia de libphonenumber, incluye una función findNumbers( )
para buscar números de teléfono en texto.
Los tipos de TypeScript se proporcionan dentro del paquete.
Utiliza libphonenumber v8.13.47
v3:
API modificada (aunque con ABI compatible con versiones anteriores)
Exportación ESM agregada
v4:
El segundo argumento para parsePhoneNumber
es un objeto.
El valor de retorno es como toJSON( )
en v3
Por ejemplo, { regionCode: 'SE' }
en lugar de una cadena de código de región
Sin constructor
No hay funciones en el objeto devuelto
No se arrojan errores
Se modificó la API para que sea mucho más limpia.
No es compatible con versiones anteriores, aunque es similar a la v3 excepto:
v5:
Se eliminó el soporte del Nodo 12
v6:
Se eliminó el soporte del Nodo 16
v7:
Se agregó la función findNumbers( )
, para buscar números de teléfono en texto
Se agregó soporte para números cortos .
Dado que esta biblioteca está precompilada, no depende del compilador de cierre y no es necesario cargarla al inicio. Esto hace que la biblioteca sea más rápida y le ahorra mucho espacio. También significa que esta biblioteca es trivial de usar en cualquier proyecto webpack
(o cualquier otro medio para ejecutarla en el navegador).
Entre todos los números de teléfono populares que utilizan libphonenumber
de Google (o lo imitan), solo este, google-libphonenumber
y libphonenumber-js
tienen archivos README decentes con ejemplos. Es posible que esto haya cambiado desde que se realizaron estos puntos de referencia por primera vez .
Una biblioteca debe cargarse rápidamente ( require()
), analizarse rápidamente la primera vez y todas las veces consecutivas. No debería inflar tu node_modules
y debería tener una pequeña huella de memoria, si es posible.
El siguiente es el resultado de un programa de prueba que carga la biblioteca, luego analiza un número de teléfono y luego otra vez. Se llama 100 veces para cada biblioteca y los valores medios se muestran aquí. Analizar un número de teléfono por primera vez puede ser más lento debido a la compilación/optimización inicial de expresiones regulares y todo eso. Analizar un número de teléfono por segunda vez mostrará la velocidad de probablemente todos los análisis futuros dentro de ese proceso.
Acción | número de teléfono impresionante 2.56.0 (lib 8.12.29) | número de teléfono lib-google 3.2.22 (lib 8.12.27) | libphonenumber-js 1.9.23 (lib-) |
---|---|---|---|
Cargar biblioteca por primera vez | 11.0ms ✅ | 29,67 ms | 32,87 ms |
Analizar el primer número de teléfono | 4,3 ms | 4,01 ms | 3,43 ms ✅ |
⇒ Cargar + analizar el primer número | 15,3 ms ✅ | 33,68 ms | 36,3 ms |
Analizar el segundo número de teléfono | 0,78 ms ✅ | 0,97 ms | 0,92 ms |
Mayor uso de memoria | 5.12M ✅ | 9,99 millones | 5,86 millones |
tamaño de node_modules | 296K ✅ | 600K | 7,6 millones |
archivos node_modules | 8 | 7 ✅ | 653 |
importar { parsePhoneNumber } de 'awesome-phonenumber'const pn = parsePhoneNumber( '0707123456', { regionCode: 'SE' } );// o en formato e164: const pn = parsePhoneNumber( '+46707123456' );// pn es ahora es lo mismo que:const pn = {válido: verdadero,número: {entrada: '0707123456',e164: '+46707123456',internacional: '+46 70 712 34 56',nacional: '070-712 34 56',rfc3966: 'tel:+46-70-712-34-56 ',significativo: '707123456',}, posibilidad: 'es-posible', código de región: 'SE', posible: verdadero, cortoPossible: falso, cortoValido: falso, puede ser marcado internacionalmente: verdadero, tipo: 'móvil', código de país: 46, tipo es móvil: verdadero, typeIsFixedLine: falso,};
El tipo de retorno es ParsedPhoneNumber
, que es ParsedPhoneNumberValid
o ParsedPhoneNumberInvalid
. La propiedad valid
identifica si el análisis fue exitoso o no y, por lo tanto, qué tipo se devuelve.
El formato de un análisis exitoso es:
interfaz ParsedPhoneNumberValid {válido: verdadero;número: {entrada: cadena;internacional: cadena;nacional: cadena;e164: cadena;rfc3966: cadena;significativo: cadena;};posibilidad: PhoneNumberPossibility; // una unión de cadenas, consulte a continuación código de región: cadena; posible: booleano; cortoPossible: booleano; cortoValid: booleano; puede ser marcado internacionalmente: booleano; tipo: tipos de números de teléfono; // una unión de cadena, consulte a continuación countryCode: number;typeIsMobile: boolean;typeIsFixedLine: boolean;}
Si no se pudo analizar el número o hubo otro error, el tipo de devolución es:
interfaz ParsedPhoneNumberInvalid {válido: falso; posible: falso; posibilidad: 'no válido'; shortPossible: booleano; shortValid: booleano; ¿error?: desconocido;};
Tenga en cuenta que un número de teléfono incorrecto (no válido) aún puede ser un número corto válido para la región determinada.
importar {parsePhoneNumber,findNumbers,getNumberFrom,getExample,getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,getAsYouType,} desde 'número de teléfono impresionante'
parsePhoneNumber( phoneNumber, { regionCode: string } )
analiza un número de teléfono como se describe anteriormente.
El primer argumento es el número de teléfono a analizar, ya sea en formato nacional o internacional (e164, es decir, con el prefijo +
). Si es un formato nacional , el segundo argumento debe contener una propiedad de cadena de regionCode
, por ejemplo, 'SE' para Suecia, 'CH' para Suiza, etc.
Para buscar (extraer) números de teléfono en texto, utilice findNumbers( )
:
import { findNumbers } from 'awesome-phonenumber'const text = 'Mi número es +46 707 123 456; de lo contrario, llama al +33777777777.'; const number = findNumbers( text );
La lista de números devuelta es del tipo PhoneNumberMatch
como por ejemplo:
interfaz PhoneNumberMatch{texto: cadena; // La cadena sin formato encontradaphoneNumber: object; // Igual que el resultado de parsePhoneNumber()start: number; // Iniciar desplazamiento en el texto: número; // Fin del desplazamiento en el texto}
Se puede proporcionar un segundo argumento de opciones para findNumbers( text, options )
en el formulario:
interfaz FindNumbersOptions{defaultRegionCode?: cadena;¿clenencia?: FindNumbersLeniency;maxTries?: número;}
donde FindNumbersLeniency
es una enumeración de 'valid'
o 'possible'
. El valor predeterminado es 'valid'
lo que significa que solo se encuentran números de teléfono válidos. Si esto se establece en 'possible'
también se encontrarán números de teléfono posibles (pero no válidos).
Se puede establecer defaultRegionCode
(por ejemplo, en 'SE'
para Suecia), en cuyo caso se encontrarán los números de teléfono en formato nacional (es decir, sin el prefijo +
), siempre que sean de esa región.
Para textos realmente grandes, maxTries
establecerá la cantidad máxima de números de teléfono para intentar buscar (en realidad no es necesario buscar).
importar { parsePhoneNumber, getNumberFrom } de 'awesome-phonenumber'const pn = parsePhoneNumber( '0707654321', { regionCode: 'SE' } );if ( pn.valid ) {const fromJp = getNumberFrom( pn, 'JP' );/ /fromJp es el número para llamar desde Japón:fromJp.number === "010 46 70 765 43 21";}
El valor de retorno de getNumberFrom
es PhoneNumberFrom
, que puede ser PhoneNumberFromValid
o PhoneNumberFromInvalid
.
PhoneNumberFromValid
se define como:
interfaz PhoneNumberFromValid{válido: verdadero;número: cadena;}
PhoneNumberFromInvalid
se define como:
interfaz PhoneNumberFromInvalid{válido: falso;¿error?: desconocido;}
A veces desea mostrar un número de teléfono de ejemplo formateado para un determinado país (y tal vez también para un determinado tipo de número de teléfono). Para ello se utiliza la función getExample
.
importar {obtenerExample} desde 'número-de-teléfono impresionante'obtenerExample (códigoregión[, tipoNúmeroDeTeléfono]); // número de teléfono analizado
phoneNumberType
es cualquiera de los tipos definidos anteriormente.
import { getExample } from 'awesome-phonenumber'// Obtener un ejemplo de número de teléfono suecoconst ejemplo = getExample( 'SE' ); // Un ejemplo de ParsedPhoneNumberValidconstMobile = getExample( 'SE', 'mobile' ); // A ParsedPhoneNumberValidexample.number.e164; // por ejemplo, '+468123456'ejemploMóvil.número.e164; // por ejemplo, '+46701234567'ejemploMóvil.número.nacional; // por ejemplo, '070 123 45 67'
Hay funciones de conversión entre los códigos de región ISO 3166-1 de 2 caracteres (por ejemplo, 'SE' para Suecia) y los códigos de llamada de país correspondientes.
importar {getCountryCodeForRegionCode,getRegionCodeForCountryCode,getSupportedCallingCodes,getSupportedRegionCodes,} desde 'número de teléfono impresionante'getCountryCodeForRegionCode (regiónCode); // -> códigodepaísobtenerCódigoRegiónParaCódigoPaís( códigopaís ); // -> código de región
getCountryCodeForRegionCode( 'SE' ); // -> 46getRegionCodeForCountryCode( 46 ); // -> 'SE'
obtener códigos de llamadas compatibles ( ); // -> [ códigos de llamada... ]
getSupportedRegionCodes( ); // -> [ códigos de región... ]
La API consta de la clase PhoneNumber
que a veces utiliza enumeraciones . Estos son:
escriba tipos de número de teléfono =| 'línea fija'| 'línea-fija-o-móvil'| 'móvil'| 'buscapersonas'| 'número-personal'| 'tarifa premium'| 'costo compartido'| 'llamada gratuita'| 'uán'| 'voip'| 'desconocido'
escriba PosibilidadNúmeroTeléfono =| 'es-posible'| 'código-de-país-inválido'| 'demasiado largo'| 'demasiado corto'| 'desconocido'
'internacional''nacional''e164''rfc3966''significativo'
Puede crear una clase AsYouType
con getAsYouType()
para formatear un número de teléfono mientras se escribe.
importar {getAsYouType} desde 'número de teléfono impresionante'const ayt = getAsYouType ('SE');
La instancia de clase devuelta tiene los siguientes métodos
// Agrega un carácter al final del númeroayt.addChar( nextChar: string );// Obtiene el número formateado actualayt.number( );// Elimina el último carácterayt.removeChar( );// Reemplaza el número entero con un nuevo número (o un número vacío si no está definido)ayt.reset( número?: cadena );// Obtiene un objeto ParsedPhoneNumber que representa el número actualayt.getPhoneNumber( );
Todas las funciones anteriores, excepto getPhoneNumber( )
devuelven el número formateado actual como una cadena.
importar {getAsYouType} desde 'número de teléfono impresionante'const ayt = getAsYouType ('SE'); ayt.addChar ('0'); // -> '0'ayt.addChar( '7' ); // -> '07'ayt.addChar( '0' ); // -> '070'ayt.addChar( '7' ); // -> '070 7'ayt.addChar( '1' ); // -> '070 71'ayt.addChar( '2' ); // -> '070 712'ayt.addChar( '3' ); // -> '070 712 3'ayt.addChar( '4' ); // -> '070 712 34'ayt.addChar( '5' ); // -> '070 712 34 5'ayt.addChar( '6' ); // -> '070 712 34 56'ayt.removeChar(); // -> '070 712 34 5'ayt.addChar( '7' ); // -> '070 712 34 57'