Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao trabalhar com validação de números de telefone ou códigos que exigem um comprimento fixo, o desafio comum é garantir que o usuário forneça exatamente o número de caracteres esperados, incluindo zeros à esquerda. No contexto de validação com Yup, uma abordagem direta usando Yup.number() pode não atender às necessidades específicas de comprimento, pois números inteiros removem zeros à esquerda automaticamente.
Imagine um cenário em que é necessário validar um código de identificação que deve ter exatamente 8 dígitos, incluindo zeros à esquerda, como '00001234' ou '00010000'. Usar Yup.number() não funciona, pois ao transformar a entrada em número, zeros à esquerda desaparecem, comprometendo a validação de comprimento.
O principal ponto de atenção é que o tipo numérico não preserva zeros à esquerda. Além disso, validações como .min(8) verificam o valor numérico, e não o comprimento da string de entrada. Portanto, a validação de comprimento deve ser feita na string, não no número.
A melhor estratégia é tratar a entrada como uma string e aplicar validações específicas de comprimento e formato usando Yup.string().
const schema = Yup.string()
.matches(/^\d{8}$/, 'O código deve possuir exatamente 8 dígitos')
.required('Código obrigatório').
Essa expressão regular garante que a entrada contenha exatamente 8 dígitos, incluindo zeros à esquerda, sem permitir caracteres não numéricos ou comprimentos diferentes. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Para validar que a entrada seja uma string de exatamente 8 dígitos numéricos, você pode usar Regex como mostrado acima. Se desejar aceitar espaços ou caracteres especiais, a regex pode ser adaptada, mas para códigos fixos, o padrão simples é suficiente. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
// Validação de código com zeros à esquerda
const entrada = '00001234'. schema.validate(entrada)
.then(() => console.log('válido'))
.catch(err => console.log(err.message)). Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
1. Reescreva a validação para usar Yup.string() em vez de Yup.number().
2. Utilize expressões regulares específicas para validar o comprimento e formato.
3. Teste várias entradas, incluindo zeros à esquerda, para garantir que o comportamento seja consistente.
4. Se for necessário, converta a string validada para número posteriormente, se a lógica do negócio assim exigir.
Ao trabalhar com códigos que precisam manter zeros à esquerda, a validação como string é praticamente obrigatória. Essa abordagem garante que o usuário forneça exatamente o formato esperado, evitando falsos positivos ou validações incorretas. Além disso, facilita ajustes futuros, como aceitar diferentes formatos ou incluir validações adicionais de caracteres. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Se essa abordagem atender às suas necessidades, basta adaptar a regex conforme o formato esperado. Caso seu cenário seja mais complexo, considere combinações de validações que envolvam máscara de entrada ou validação na camada de UI antes de passar para o Yup. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Exato! Aqui, muitas vezes, a gente valida com regex na entrada mesmo, e depois converte pra número se precisar usar em cálculos. Assim, mantém o formato e evita problemas com zeros.
Boa dica, usar string realmente resolve o problema de zeros à esquerda. Aqui no meu time, às vezes a validação numérica acaba mascarando esse tipo de detalhe. Testar com regex é mais seguro.
Concordo, Rafael. O ponto é que, dependendo do uso, é importante também pensar na interface, pra não deixar o usuário confuso com a mscara. Mas a validação fica mais simples assim.