You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@jubacchi posso tentar te ajudar, mas preciso entender o que precisa.
Outra coisa, onde vc quer utilizar isso? Pra que? Talvez alguma biblioteca te ajude mais.
Obrigado.
Aproveitei a função de @claudioacioli e fiz uma versão para postgreSQL.
CREATE OR REPLACE FUNCTION public.formatCpfCnpj(cpfcnpj character varying)
RETURNS character varying
LANGUAGE plpgsql
AS $function$
DECLARE
cnpjcpf_only_numbers varchar;
BEGIN
cnpjcpf_only_numbers = regexp_replace(cpfcnpj, '(\D)', ''); -- Remove todos os caracteres, exceto números
case length(cnpjcpf_only_numbers)
when 11 then
return regexp_replace(cnpjcpf_only_numbers, '(\d{3})(\d{3})(\d{3})(\d{2})','\1.\2.\3-\4');
when 14 then
return regexp_replace(cnpjcpf_only_numbers, '(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})','\1.\2.\3/\4-\5');
else
return cnpjcpf_only_numbers;
END case;
END;
$function$
;
Olá @MauricioSarmento, procure sempre utilizar as expressões regulares como na função escrita pelo @davidalves1, ela será mais performatica, deixando o php fazer o trabalho sujo por vc.
@FlavioSuarez, vc não precisa colocar o if strlen... se não quiser ser bem explícito, o str_pad fará por vc.
Outro ponto é, se o CNPJ com 13 e o CPF com 10 no final precisa adicionar um 0 antes para formatar corretamente, eu adicionaria esse preenchimento fora da função mantendo a função estável.
Hey @FlavioSuarez, obrigado pela contribuição. Como optou por separar as funções de CPF e CNPJ, não vejo a necessidade de fazer a validação, pois você já sabe quantos caracteres deve ter o CNPJ ou CPF. Assim, é só adicionar os 0 a esquerda antes de fazer a formatação, mais ou menos assim:
Inclusive, @FlavioSuarez, se ainda estiver no projeto que percebeu essa circunstância, se possível, verifique ou se o campo esteja como númerio no banco de dados ou se em algum lugar o PHP antes da inserção/alteração ele esteja convertendo em numerico.
Caso seja numerico, ele remove o 0 da esquerda e acaba fazendo você necessitar adicionar depois.
Excelente, obrigado!