DEV Community

Jardel
Jardel

Posted on

1

Validando input file e select com Yup

Fala, galera! Estava implementando aqui um formulário com validação Yup e me deparei com dois campos que nunca tinha trabalhado: select e input file.

Procurei algumas formas de fazer a melhor validação desses campos e confesso que achei bem escasso essas informações. Então vou deixar registrado aqui caso alguém queira uma fonte de ajuda na hora de implementar esses campos.

Bom, o formulário que implementei é esse:
UI Formulário

E a solução que implementei foi essa:
Código Yup


O que eu usei

  • O Yup.mixed() trata todos os tipos, mas você também consegue tipar para receber algo específico.

  • O Yup.oneOf() me ajudou a setar corretamente as options do meu select e a validar se o campo estava preenchido, se não tivesse preenchido ele retornava uma mensagem de erro personalizada.

  • O Yup.test() eu adicionei para validar o input file. Nele eu precisava verificar se o campo estava preenchido e se era um .pdf, e também tem o retorno de mensagens de erro personalizadas.

Essa foi uma solução que eu desenvolvi para o que era necessário.

Sugestão: Se você tem alguma sugestão de melhoria ou qualquer que seja, comenta aí.

Ressalva: Também deve haver validação no backend para prevenir alteração no tipo do arquivo via proxy.


Palavras-chave: yup, input file, select, validate, how to validate input file with yup, how to validate select with yup.

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay