Este script valida números de teléfono argentinos utilizando el listado oficial de numeración geográfoca publicada por ENACOM (Ente Nacional de Comunicaciones).
La validación, para números no específicos, se basa en comparar el código de área y el bloque numérico asignado a cada una de las operadoras. Si estas condiciones se cumplen, se considera que los números subsiguientes podrían pertenecer a un abonado.
Actualmente, no existe un servicio que permita verificar si un número completo (código de área, bloque y número asignado), pertenece efectivamente a un abonado en servicio. Por lo tanto, este script asume esa posibilidad, quedando su interpretación y uso a criterio del usuario.
Versión numeración geográfica (ENACOM): 22 de octubre de 2024.
npm i telefono-argentino
yarn add telefono-argentino
https://www.jsdelivr.com/package/npm/telefono-argentino
var tel = new TelefonoArgentino('5491150176006');
Retorna un array asociativo con los tipos de datos pertenecienes al número telefónico. Si el número de teléfono es incorrecto retorna: false
tel.getData();
{
area_code : "11",
country :"54",
filter_input :"5491150176006",
format :"+54 9 11 5017-6006",
htmlify :"<span class="country">+54</span> <span class="mobile">9</span> <span class="area_code">11</span> <span class="number">5071-6006</span>"
input :"5491150176006",
international : false,
mobile :"9",
mobile_prefix : false,
national_call : false,
number :"50176006",
special : false,
specific : false,
type :"mobile",
block_number: "5017",
given_number: "6006"
}
Retorna el string ingresado para validar.
tel.input();
Tipo booleano true
| false
.
tel.isValid();
Retorna el tipo de teléfono. Los tipos puenden ser:
landline
Teléfono fijo.mobile
Teléfono móvil.special
Comprendido por los números como: 911, 112, 113, 114, etc.specific
Comprendido por los números como: 0800, 0810, etc.
tel.getType();
Retorna un array con la lista de caracteres inválidos. Si no existieran caracteres inválidos el retorno es: false
tel.invalidChars();
var tel = new TelefonoArgentino('54911501;><76006^%$^%$^');
tel.invalidChars();
// Resultado
[";", ">", "<", "^", "%", "$"]
Retorna el número de teléfono con cada una de sus partes encapsuladas en una etiqueta `<span/>``
new TelefonoArgentino("+54 9 11 4639-1234").htmlify();
Retorna
<span class="country" data-country="1">+54</span> <span class="mobile" data-mobile="1">9</span> <span class="area-code" data-area_code="1">11</span> <span class="number" data-number="1">4639-1234</span>
Para darle formato al número de teléfono puede configurarse un template y pasarlo al parámetro opciones usando la clave: format
.
El formato por defecto contempla todos los formatos y tipos de teléfono que valida el script.
{
format: '{{specific}}{{special}}{{international|add_after:" "}}{{country|add_after:" "}}{{mobile|add_after:" "}}{{national_call}}{{area_code|add_after:" "}}{{mobile_prefix|add_after:" "}} {{number}}'
}
El formato solo acepta las claves de retorno del script; ejemplo: area_code
, country
, etc. Para parsear la clave con el valor se debe encerrar la clave entre doble llave, así: {{ clave
}}.
Las claves pueden ir separadsas o concatenadas por una coma, de este modo: {{ area_code,number }}
.
Para agregar un elemento antes o después del valor, se puede incorporar un solo parámetro con el elemento a agregar, antes o después (before, after en inglés); del siguiente modo:
'{{ area_code|add_after:"-" }}'
// 11-
'{{ area_code|add_after:"+",number|add_before:"=" }}'
// 11+=4639-2313
También se pueden utilizar las claves por separado; sin usar la concatenación.
'{{ area_code|add_after:"+" }}{{ number|add_before:"=" }}'
// 11+=4639-2313
Es importante tener en cuenta que si la clave no tiene valor, si éste es false
; no va a imprimir nada, y esto incluye el separador.
Caso con número, código de área y código país.
const tel = new TelefonoArgentino(
"54.3624448012",
{
format: '({{ country|add_after:"-" }}{{ area_code }}){{ number|add_before:" " }}'
}
);
tel.getData().format;
// '(+54-362) 444-8012'
Sin código de país.
const tel = new TelefonoArgentino(
"11 4639-1234",
{
format: '({{ country|add_after:"-" }}{{ area_code }}){{ number|add_before:" " }}'
}
);
tel.getData().format;
// '(11) 4639-1234'
Sin código de país y código de área. Cómo el paréntesis queda vacío, se remueve. Los espacios y elementos agregados antes y después, no se imprimen.
const tel = new TelefonoArgentino(
"4639-1234",
{
format: '({{ country|add_after:"-" }}{{ area_code }}){{ number|add_before:" " }}'
}
);
tel.getData().format;
// '4639-1234'
El número puede estar segmentado en la cantidad de partes que se desee utilizando la combinación del caracter numeral y guión. El formato se debe pensar de derecha a izquierda. Por ejemplo; para que un número de ocho dígitos se divida en miles, el formato sería este:
##-###-###
. El número 12345678
, qudaría de este modo: 12-345-678
.
Algunos casos
const tel = new TelefonoArgentino("+54.3624448012", {numberFormat: "##-###-###"});
tel.getData().format;
// '+54 362 4-448-012'
const tel = new TelefonoArgentino("+54.3624448012", {numberFormat: "##-##-##-##"});
tel.getData().format;
// '+54 362 4-44-80-12'
Se puede incorporar el parámetro numberFormatSeparator
, para cambiar el separador de dígitos.
const tel = new TelefonoArgentino(
"54.3624448012",
{
numberFormat: "##-###-###",
numberFormatSeparator: "."
}
);
tel.getData().format;
// '+54 362 4.448.012'
La información referenciada de las regiones se puede obtener de un Google spreadsheet en:
https://sheets.googleapis.com/v4/spreadsheets/14H7VE3zfllDDTC73L0bL7nyjkdodPMXvqs1CH__xgFY/values/db?key={{your-google-api-key}}&alt=json
O usar el archivo response.json ubicado dentro del directorio data, dentro del repositorio.
/**
* Fetch data by area code
*/
async function regionByAreaCode(options = {}) {
let data = [];
const uri = "https://sheets.googleapis.com/v4/spreadsheets/14H7VE3zfllDDTC73L0bL7nyjkdodPMXvqs1CH__xgFY/values/db?key={{your-google-api-key}}&alt=json";
let response = await fetch(uri, options);
data = await response.json();
return data;
}
// Validate
const tel = new TelefonoArgentino("+54 9 11 5017-6006");
console.log(tel.getData());
regionByAreaCode().then((data) => {
const values = data.values.find((f) => f[0] == tel.getData().area_code);
console.log(values);
});
- ENACOM, Ente Nacional de Comunicaciones
- https://www.enacom.gob.ar/numeracion_p136, ENACOM, Numeración y señalización.
- https://es.wikipedia.org/wiki/Números_telefónicos_en_Argentina, Wikipedia, Números telefónicos en Argentina, 2016