^(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
Segue melhoria, com o regex abaixo é removido alguns parênteses desnecessários, move ^ para o início da verificação e deixa de ser opcional, adiciona $ no final para verificar se terminou a string, na parte do DDD, caso seja aberto o parênteses, será necessário adicionar o parênteses fechando e como é para ser um padrão brasileiro, foi fixado o DDI como 55, deixando o + como opcional.
Validação:
^(?:\+?55\s?)?(?:(\([1-9]{2}\))|\d{2})\s?(?:[9]\d{4}|\d{4})[\s.-]?\d{4}$
Mascara JavaScript