DEV Community

Bruno Oliveira
Bruno Oliveira

Posted on

Aplicando Máscaras em Dados no PHP

Durante o desenvolvimento de sistemas, é comum a necessidade de formatar dados para exibição, como CPF, CNPJ e CEP. A boa prática recomenda armazenar esses dados no banco em seu formato “puro”, sem caracteres de formatação, garantindo maior flexibilidade e integridade.

Entretanto, na apresentação de relatórios, notas fiscais ou telas de exibição, a formatação adequada desses dados melhora a legibilidade e a experiência do usuário. Para isso, podemos criar uma solução genérica e reutilizável no PHP.

Criando um Helper para Máscaras

Vamos implementar uma classe MaskHelper que permitirá aplicar máscaras de forma dinâmica aos dados.

<?php

namespace App\Helpers;

final class MaskHelper
{
    private const MASK_CHAR = '#';

    public static function mask(string $value, string $format): string
    {
        $cleanValue = self::clean($value);
        if ($cleanValue === '' || $format === '') {
            return $value;
        }

        $masked = '';
        $index = 0;

        foreach (str_split($format) as $char) {
            $masked .= ($char === self::MASK_CHAR && isset($cleanValue[$index]))
                ? $cleanValue[$index++]
                : $char;
        }

        return $masked;
    }

    public static function cpf(string $value): string
    {
        return self::mask($value, '###.###.###-##');
    }

    public static function cnpj(string $value): string
    {
        return self::mask($value, '##.###.###/####-##');
    }

    public static function cpfCnpj(string $value): string
    {
        return match (strlen(self::clean($value))) {
            11 => self::cpf($value),
            14 => self::cnpj($value),
            default => $value,
        };
    }

    private static function clean(string $value): string
    {
        return preg_replace('/\D/', '', $value) ?? '';
    }
}
Enter fullscreen mode Exit fullscreen mode

Como Utilizar a Classe

A implementação acima permite aplicar máscaras facilmente aos dados, tornando a formatação mais flexível e reutilizável em toda a aplicação. Veja alguns exemplos de uso:

<php

use App\Helpers\MaskHelper;

$cpf = '12345678900';
echo MaskHelper::cpf($cpf); // Saída: 123.456.789-00

$cnpj = '12345678098700';
echo MaskHelper::cnpj($cnpj); // Saída: 12.345.678/0987-00

$documento = '12345678900';
echo MaskHelper::cpfCnpj($documento); // Detecta e aplica a máscara correta

$cep = '1234567';
echo MaskHelper::mask($cep, '##.###-##'); // Saída: 12.345-67
Enter fullscreen mode Exit fullscreen mode

Conclusão

A classe MaskHelper permite padronizar e reutilizar a formatação de dados em um sistema PHP, melhorando a manutenção do código e a experiência do usuário. Esse tipo de abordagem é útil para exibição de dados em relatórios, telas de administração e formulários.

Caso precise de outras máscaras, basta chamar o método mask() com o formato desejado, tornando a solução altamente flexível!

Top comments (0)