^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$
const regex = /^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$/;
-
^(55)?
:- Código do país;
- Exemplo: 55;
- Opcional.
-
(?:([1-9]{2}))?)
:- Código da cidade;
- Busca por dois números de 1 à 9.
- Exemplo: 11
- Opcional.
-
(\d{4,5})(\d{4})
:- Número de telefone fixo ou celular;
- Segue buscando por dois grupos de números, um de 5 ou 4 digitos, que diferencia números de telefones fixos e celulares, e os últimos números que são sempre 4 digitos;
- Exemplo: 00000000 (8 digitos) ou 000000000 (9 digitos).
/**
* Regex groups for phone format.
* @param {string} str - The phone number.
* @returns {string} The str parameter with only numbers.
*/
function (str) {
const regex = /^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$/;
return str
.replace(/\D/g, '')
.replace(regex,
(fullMatch, country, ddd, prefixTel, suffixTel) => {
return fullMatch;
}
);
}
Com esse regex você conseguê a separação por código do país, código da cidade, prefixo e sufixo do telefone.
Capacidades numéricas:
-
1100000000
- [11][0000][0000]
- [ddd][prefixTel][suffixTel]
-
11900000000
- [11][90000][0000]
- [ddd][prefixTel][suffixTel]
-
00000000
- [0000][0000]
- [prefixTel][suffixTel]
-
900000000
- [90000][0000]
- [prefixTel][suffixTel]
-
551100000000
- [55][11][0000][0000]
- [country][ddd][prefixTel][suffixTel]
-
5511900000000
- [55][11][90000][0000]
- [country][ddd][prefixTel][suffixTel]
/**
* Format phone.
* @param {string} str - The phone number.
* @returns {string} Formated phone.
*/
function formatPhone(str) {
const regex = /^(55)?(?:([1-9]{2})?)(\d{4,5})(\d{4})$/;
return str
.replace(/\D/g, '')
.replace(regex,
(fullMatch, country, ddd, prefixTel, suffixTel) => {
if (country) return `+${ country } (${ ddd }) ${ prefixTel }-${ suffixTel}`;
if (ddd) return `(${ ddd }) ${ prefixTel }-${ suffixTel}`;
if (prefixTel && suffixTel) return `${ prefixTel }-${ suffixTel }`;
return str;
}
);
}
Essa função irá retornar os números assim:
Input: 00000000
Output: 0000-0000
Input: 000000000
Output: 00000-0000
Input: 1100000000
Output: (11) 0000-0000
Input: 551100000000
Output: +55 (11) 0000-0000
Opa! Tive que fazer um pequeno ajuste pra reconhecer ponto, traço ou qualquer caracter no meio do telefone.
ex.: 91234-5678, 91234.5678 ou ainda 91234 5678
Caso ajude, a regex ficou:
"(?:(^\\+\\d{2})?)(?:([1-9]{2})|([0-9]{3})?)(\\d{4,5}).?(\\d{4})"
:)