Trilha de aprendizado · Nível 6 · Tutorial 8

Aplicar validação nativa com instruções claras

Ao concluir, você poderá configurar obrigatoriedade e limites de preenchimento, associar instruções aos campos e explicar por que a validação do navegador não garante a segurança dos dados recebidos.

  • Nível: Intermediário
  • Duração: 25 min
  • 9 passos
Aplicar validação nativa com instruções claras

O que você vai percorrer

  1. Entender o que o navegador verifica Identifique quando o formato de um preenchimento bloqueia a tentativa de envio e o que a ausência de bloqueio permite concluir. 2 min
  2. Exigir preenchimento e escolhas de forma clara Use required para exigir preenchimento ou seleção e comunique a obrigatoriedade conforme o tipo de controle. 3 min
  3. Definir limites de comprimento Configure minlength e maxlength em campos textuais e preveja como eles afetam o preenchimento. 2 min
  4. Restringir intervalos de números e datas Use min e max para delimitar quantidades e períodos, incluindo os valores das fronteiras e mantendo as instruções visíveis coerentes. 3 min
  5. Controlar os incrementos permitidos Combine min, max e step para aceitar valores alinhados ao incremento e comunicar essa regra com clareza. 2 min
  6. Associar instruções visíveis aos campos Associe orientações persistentes aos controles com aria-describedby, mantendo o rótulo e a coerência com as restrições. 3 min
  7. Testar as restrições no navegador Teste um formulário no seu computador e diferencie bloqueio do envio, prevenção de entrada e ausência de bloqueio nativo. 4 min
  8. Reconhecer os limites da validação no navegador Diferencie atender às restrições do formulário, comprovar uma informação e validar os dados no servidor. 2 min
  9. Aplicar e revisar um formulário com instruções claras Ajuste um formulário local, compare uma tentativa bloqueada com outra sem bloqueio e justifique os limites da validação nativa. 3 min

O que você vai aprender

  • Aplicar required e comunicar visivelmente quais informações são obrigatórias.
  • Configurar limites de comprimento, intervalo e incremento conforme o controle utilizado.
  • Associar instruções visíveis ao campo com aria-describedby, preservando seu rótulo.
  • Verificar a aceitação ou o bloqueio de preenchimentos válidos e inválidos pelos recursos nativos.
  • Distinguir verificação de formato, validade real da informação e validação obrigatória no servidor.

Antes de começar

  • Configurar o envio de dados com form
  • Escolher tipos de input conforme a informação
  • Criar opções de escolha com checkbox, radio e select

Passo 1 de 9

Entender o que o navegador verifica

Identifique quando o formato de um preenchimento bloqueia a tentativa de envio e o que a ausência de bloqueio permite concluir.

Uma checagem antes do envio

O próprio navegador verifica

Ao clicar em um botão de envio, o navegador verifica as restrições dos campos sujeitos à validação. Se algum deles não atender às restrições, essa tentativa normal de envio é bloqueada. Essa checagem é chamada de validação nativa e não exige JavaScript.

Leia este trecho de formulário:

Dois campos opcionais

html
<form>
  <p>
    <label for="email">E-mail (opcional)</label>
    <input type="email" id="email" name="email">
  </p>
  <p>
    <label for="site">Site (opcional)</label>
    <input type="url" id="site" name="site">
  </p>
  <button type="submit">Enviar</button>
</form>

Exemplo

O tipo já impõe uma restrição de formato

No campo de e-mail, bia.exemplo.com não atende ao formato; bia@exemplo.com atende.

No campo de URL, meu site não atende ao formato; https://exemplo.com atende.

Vazio é diferente de formato inadequado

Neste trecho, nenhum campo exige preenchimento. Deixá-los vazios não causa bloqueio. Mas, se forem preenchidos, seus valores precisam atender ao formato do tipo escolhido.

Preveja o bloqueio

Qual preenchimento impede o envio?

Considere o formulário apresentado, com apenas os campos opcionais E-mail (type="email") e Site (type="url"). Em qual situação o navegador bloqueia a tentativa ao clicar em Enviar?

Sem bloqueio não significa concluído

A checagem não é uma confirmação

Quando todos os campos sujeitos à validação atendem às restrições, a validação nativa deixa a tentativa de envio prosseguir.

Isso permite concluir apenas que nenhuma dessas restrições impediu a tentativa. Não é uma confirmação de recebimento, processamento ou armazenamento dos dados.

Explique duas tentativas

O que mudou após a correção?

Um formulário tem apenas dois campos opcionais: E-mail (type="email") e Site (type="url").

  • Primeira tentativa: E-mail contém bia.exemplo.com; Site está vazio.
  • Segunda tentativa: E-mail foi corrigido para bia@exemplo.com; Site continua vazio.

Ao clicar em Enviar, qual tentativa é bloqueada e por quê? A segunda permite afirmar que os dados foram processados? Explique em poucas frases.

Escreva pelo menos 20 caracteres (0/20).

Passo 2 de 9

Exigir preenchimento e escolhas de forma clara

Use required para exigir preenchimento ou seleção e comunique a obrigatoriedade conforme o tipo de controle.

Exija no HTML e avise no texto

required: a presença ativa a exigência

required exige preenchimento ou seleção nos controles compatíveis. É um atributo booleano: basta estar presente. Escrever required="false" não desativa a exigência; para removê-la, retire o atributo.

Comunique também a obrigatoriedade no rótulo, na legenda ou em uma instrução próxima. Não dependa apenas de cor ou de um asterisco sem explicação.

Trecho de um formulário de inscrição

html
<p>
  <label for="nome">Nome (obrigatório)</label>
  <input type="text" id="nome" name="nome" required>
</p>

<fieldset>
  <legend>Turno (escolha obrigatória)</legend>
  <p>
    <input type="radio" id="manha" name="turno" value="manha" required>
    <label for="manha">Manhã</label>
  </p>
  <p>
    <input type="radio" id="tarde" name="turno" value="tarde" required>
    <label for="tarde">Tarde</label>
  </p>
</fieldset>

Dica

Em radio, a exigência é do grupo

Nos radios com o mesmo name, basta um integrante ter required para exigir uma escolha no grupo — não necessariamente daquele integrante. No exemplo, Manhã ou Tarde atende à exigência. Manter required em todos os integrantes deixa a regra consistente e facilita a manutenção.

Qual escolha atende à exigência?

Obrigatório escolher, mas qual opção?

Em um formulário, os radios “Manhã” e “Tarde” têm o mesmo name="turno". Apenas “Tarde” tem required. O que atende à obrigatoriedade desse grupo?

Checkbox e select: exigências diferentes

Checkbox: aquela opção deve estar marcada

Em um checkbox, required exige a marcação daquela opção individual. Se você colocar o atributo em três checkboxes, exigirá os três marcados — não “pelo menos um do conjunto”.

Confirmação individual obrigatória

html
<input type="checkbox" id="leitura" name="leitura" value="sim" required>
<label for="leitura">
  Li as instruções da oficina (obrigatório)
</label>

Select: a orientação inicial não vale como escolha

Em um select simples de seleção única, use uma primeira option com value="", diretamente dentro do select, fora de qualquer optgroup. Ela apresenta a orientação inicial.

Com required, manter essa opção selecionada não atende à exigência: é preciso escolher uma opção com valor não vazio.

Lista com escolha efetiva obrigatória

html
<label for="oficina">Oficina (obrigatória)</label>
<select id="oficina" name="oficina" required>
  <option value="">Escolha uma oficina</option>
  <option value="fotografia">Fotografia</option>
  <option value="desenho">Desenho</option>
</select>

Relacione a exigência ao controle

Qual configuração usar?

Associe cada requisito à configuração que o atende. Em todos os casos, a obrigatoriedade também deve ser informada visivelmente.

Toque em um item e depois no par correspondente.

Passo 3 de 9

Definir limites de comprimento

Configure minlength e maxlength em campos textuais e preveja como eles afetam o preenchimento.

Do requisito aos atributos

Quanto texto pode ser preenchido?

minlength define o comprimento mínimo de um texto preenchido; maxlength, o máximo. Eles funcionam em controles textuais compatíveis, como input type="text" e textarea.

Neste exemplo, o apelido é obrigatório e deve ter de 4 a 12 caracteres, incluindo os dois limites:

Limites e orientação coerentes

html
<label for="apelido">Apelido (obrigatório)</label>
<p>Use de 4 a 12 caracteres.</p>
<input type="text" id="apelido" name="apelido"
       required minlength="4" maxlength="12">

Dica

O máximo pode agir durante a digitação

Com maxlength, o navegador frequentemente impede a entrada de caracteres adicionais ao atingir o limite. Não espere necessariamente uma mensagem de erro depois de tentar enviar.

Complete as restrições

De 5 a 8 caracteres

Um código textual obrigatório deve ter de 5 a 8 caracteres. Complete a lacuna com os dois atributos de comprimento, separados por um espaço. Use aspas duplas.

<input type="text" required ____>

Opcional também pode ter limites

O mínimo não exige preenchimento

Sem required, um campo vazio continua válido mesmo com minlength. Se a pessoa digitar um texto, ele deverá respeitar o mínimo.

Neste textarea, deixar vazio é permitido; digitar menos de 8 caracteres bloqueia a tentativa normal de envio.

Instrução que deixa a escolha clara

html
<label for="recado">Recado (opcional)</label>
<p>Se preencher, use de 8 a 40 caracteres.</p>
<textarea id="recado" name="recado"
          minlength="8" maxlength="40"></textarea>

Dica

Comprimento não é quantidade

minlength e maxlength limitam o comprimento do texto, não o valor de uma quantidade. Esses atributos não se aplicam a input type="number".

Preveja o comportamento

O que acontece com o recado?

Considere o campo opcional com minlength="8" e maxlength="40". Relacione cada situação ao comportamento esperado, considerando apenas essas restrições.

Toque em um item e depois no par correspondente.

Passo 4 de 9

Restringir intervalos de números e datas

Use min e max para delimitar quantidades e períodos, incluindo os valores das fronteiras e mantendo as instruções visíveis coerentes.

Delimitar uma quantidade

Do mínimo ao máximo

Em controles compatíveis, min define o limite inferior e max, o superior. Os próprios limites fazem parte do intervalo permitido, desde que as demais restrições do campo também sejam atendidas.

Para uma quantidade de ingressos de 2 a 6 unidades, mantenha o texto visível e os atributos de acordo:

Quantidade com dois limites

html
<label for="ingressos">Quantidade de ingressos (de 2 a 6 unidades)</label>
<input type="number" id="ingressos" name="ingressos"
       min="2" max="6">

Classificar os valores

Onde cada quantidade fica?

Para o campo com min="2" e max="6", associe cada quantidade à sua posição no intervalo.

Toque em um item e depois no par correspondente.

Delimitar um período

Datas também têm fronteiras

Em um input type="date", min define a primeira data permitida e max, a última. Neste exemplo de visita a uma exposição, tanto 10/11/2027 quanto 20/11/2027 pertencem ao período.

Período comunicado no rótulo

html
<label for="visita">Data da visita (de 10/11/2027 a 20/11/2027)</label>
<input type="date" id="visita" name="visita"
       min="2027-11-10" max="2027-11-20">

Exemplo

Quando só um limite é necessário

Não é obrigatório usar os dois atributos:

  • “No mínimo 2 unidades”: use min="2" no campo numérico, sem max.
  • “Até 20/11/2027, inclusive”: use max="2027-11-20" no campo de data, sem min.

Não invente um segundo limite se o requisito não o exige.

Dica

Conseguir digitar não significa passar na validação

O calendário ou os botões do campo podem facilitar a escolha, mas nem sempre impedem a digitação de valores fora do intervalo. Se um valor assim permanecer no controle, a validação nativa bloqueia a tentativa normal de envio.

Conferir instrução e atributos

Qual configuração corresponde ao período?

A orientação de um campo type="date" diz: “Escolha uma data de 05/12/2027 a 09/12/2027, incluindo os dois dias”. Quais atributos representam exatamente esse intervalo?

Passo 5 de 9

Controlar os incrementos permitidos

Combine min, max e step para aceitar valores alinhados ao incremento e comunicar essa regra com clareza.

Estar no intervalo não basta

O atributo step define o incremento entre valores numéricos válidos. Nos exemplos com min explícito, esse mínimo é a base: parta dele e some o incremento até alcançar o limite permitido.

Trecho de um formulário

html
<label for="pecas">Quantidade de peças (obrigatório)</label>
<p>Informe de 2 a 14 peças, em incrementos de 4 a partir de 2.</p>
<input type="number" id="pecas" name="pecas"
       min="2" max="14" step="4" required>

Exemplo

Uma restrição, não apenas um ajuste dos botões

Os valores permitidos são 2, 6, 10 e 14. O valor 8 está dentro do intervalo, mas viola step e bloqueia a tentativa normal de envio. A restrição também vale para números digitados: não serve apenas para configurar os botões de aumentar e diminuir.

Encontre o valor desalinhado

Um campo tem type="number", min="3", max="15" e step="4". Entre 7, 9, 11 e 15, o único valor dentro do intervalo que viola o incremento é ____.

Configure incrementos fracionários

Em input type="number", omitir step mantém o incremento padrão de 1. Com min="0.5" e max="3", isso permite apenas 0,5; 1,5 e 2,5. Para aceitar avanços de meio quilograma, configure step="0.5".

Unidade, intervalo e incremento visíveis

html
<label for="argila">Quantidade de argila (obrigatório)</label>
<p>Informe de 0,5 a 3 kg, em incrementos de 0,5 kg.</p>
<input type="number" id="argila" name="argila"
       min="0.5" max="3" step="0.5" required>

Exemplo

Agora são permitidos 0,5; 1; 1,5; 2; 2,5 e 3 kg. Já 1,2 kg continua desalinhado. Nos atributos HTML, escreva decimais com ponto (0.5); no texto visível em português, use vírgula (0,5).

Faça o código corresponder à instrução

Um campo type="number" terá a instrução: “Informe de 0,5 a 2 litros, em incrementos de 0,25 litro a partir de 0,5”. Qual configuração corresponde ao requisito?

Passo 6 de 9

Associar instruções visíveis aos campos

Associe orientações persistentes aos controles com aria-describedby, mantendo o rótulo e a coerência com as restrições.

Oriente antes do erro

Três funções diferentes

Uma orientação útil aparece antes da tentativa de envio e continua visível durante o preenchimento.

  • Rótulo: identifica o que informar.
  • Instrução: explica como preencher, incluindo formato, unidade, limites e obrigatoriedade quando necessários.
  • Mensagem de erro: aponta um problema encontrado no preenchimento.

Veja como associar uma instrução ao campo:

Rótulo e instrução preservados

html
<label for="apelido">Apelido (obrigatório)</label>
<input id="apelido" name="apelido" type="text"
       required minlength="4" maxlength="12"
       aria-describedby="apelido-ajuda">
<p id="apelido-ajuda">Use de 4 a 12 caracteres.</p>

No controle, aria-describedby="apelido-ajuda" referencia o id do parágrafo, sem o prefixo #. Esse texto fornece uma descrição acessível para tecnologias assistivas, como leitores de tela. A descrição complementa o nome fornecido pelo label; não remova nem substitua o rótulo.

Complete a associação

Qual elemento contém a ajuda?

html
<label for="email">E-mail (obrigatório)</label>
<input id="email" name="email" type="email"
       required aria-describedby="___">
<p id="email-ajuda">Use o formato nome@example.com.</p>

Complete aria-describedby="___" para associar a instrução ao campo. Digite apenas o valor que falta, sem aspas.

Associe mais de uma instrução

aria-describedby aceita vários valores de id, separados por espaços, sem vírgulas ou #. Assim, dois elementos de orientação podem compor a descrição do mesmo campo.

Uma descrição com duas referências

html
<label for="quantidade">Quantidade</label>
<input id="quantidade" name="quantidade" type="number"
       required min="2" max="10" step="2"
       aria-describedby="quantidade-obrigatoria quantidade-limites">
<p id="quantidade-obrigatoria">Preenchimento obrigatório.</p>
<p id="quantidade-limites">Informe de 2 a 10 unidades, de 2 em 2.</p>

Dica

Descrever não é restringir

A ajuda e sua associação acessível não criam regras de validação. Neste exemplo, as restrições vêm de required, min, max e step. Escrever “de 2 a 10” sem configurar os atributos não limita o valor.

Escreva uma orientação coerente

Ajuda para a duração da reserva

html
<label for="duracao">Duração da reserva</label>
<input id="duracao" name="duracao" type="number"
       required min="30" max="120" step="30"
       aria-describedby="duracao-ajuda">
<p id="duracao-ajuda">[orientação a escrever]</p>

A duração é informada em minutos. Escreva somente o texto que substituirá “[orientação a escrever]”, mantendo o label e os atributos. Comunique obrigatoriedade, unidade, intervalo e incremento em uma orientação breve.

Passo 7 de 9

Testar as restrições no navegador

Teste um formulário no seu computador e diferencie bloqueio do envio, prevenção de entrada e ausência de bloqueio nativo.

Prepare o teste local

Um arquivo, sem dependências

Copie todo o código abaixo, salve como teste-validacao.html no seu computador e abra no navegador.

Use somente dados fictícios. O formulário usa GET sem action, portanto a tentativa de envio aponta para o próprio documento. Não há CSS, JavaScript, serviço remoto nem processamento ou armazenamento no servidor.

Formulário completo para os testes

html
<!doctype html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Teste local de validação</title>
</head>
<body>
  <main>
    <h1>Teste local de validação</h1>
    <p>Use apenas dados fictícios. Este formulário não tem um serviço de processamento.</p>

    <form method="get">
      <div>
        <label for="apelido">Apelido (obrigatório)</label>
        <input type="text" id="apelido" name="apelido"
          required minlength="3" maxlength="8"
          aria-describedby="ajuda-apelido">
        <p id="ajuda-apelido">Digite de 3 a 8 caracteres.</p>
      </div>

      <div>
        <label for="email">E-mail (obrigatório)</label>
        <input type="email" id="email" name="email" required
          aria-describedby="ajuda-email">
        <p id="ajuda-email">Use um endereço fictício, como lia@example.com.</p>
      </div>

      <div>
        <label for="pagina">Página (obrigatória)</label>
        <input type="url" id="pagina" name="pagina" required
          aria-describedby="ajuda-pagina">
        <p id="ajuda-pagina">Informe uma URL completa, como https://example.com.</p>
      </div>

      <div>
        <label for="quantidade">Quantidade (obrigatória)</label>
        <input type="number" id="quantidade" name="quantidade"
          required min="2" max="10" step="2"
          aria-describedby="ajuda-quantidade">
        <p id="ajuda-quantidade">De 2 a 10 unidades, em incrementos de 2.</p>
      </div>

      <div>
        <label for="data">Data (obrigatória)</label>
        <input type="date" id="data" name="data"
          required min="2027-05-10" max="2027-05-20"
          aria-describedby="ajuda-data">
        <p id="ajuda-data">De 10/05/2027 a 20/05/2027, incluindo essas datas.</p>
      </div>

      <button type="submit">Testar envio local</button>
    </form>
  </main>
</body>
</html>

Teste preenchimento, formato e comprimento

Mantenha os outros campos válidos

Preencha estes valores de referência, sem clicar no botão ainda:

  • Apelido: Lia
  • E-mail: lia@example.com
  • Página: https://example.com
  • Quantidade: 4
  • Data: 15 de maio de 2027, no formato exibido pelo navegador.

Sem editar o HTML, faça cada teste abaixo separadamente. Depois de observar o resultado, restaure o valor de referência antes de seguir. Assim, apenas uma restrição fica em teste por vez.

Exemplo

Compare o esperado com o observado

| Ação no formulário | Resultado esperado |
| --- | --- |
| Apague o e-mail e clique em Testar envio local. | Bloqueio por falta de preenchimento obrigatório. |
| Digite lia no e-mail e tente enviar. | Bloqueio por formato inadequado. |
| Digite pagina no campo Página e tente enviar. | Bloqueio por formato inadequado de URL. |
| Apague o apelido, digite Li e tente enviar. | Bloqueio por comprimento abaixo de 3. |
| Apague o apelido e digite abcdefghi, letra por letra. Não envie ainda. | O navegador normalmente limita a entrada a abcdefgh, sem precisar mostrar uma mensagem de erro. |

Para testar minlength, digite o texto no campo: não substitua esse teste por um value inicial no código.

Dica

Observe o efeito, não a frase

Texto, idioma e apresentação das mensagens variam conforme o navegador e o ambiente. Ele também pode indicar um impedimento por vez, sem explicar todos os requisitos. Se outro campo for apontado, restaure os valores de referência e repita o teste.

Teste limites e uma tentativa válida

Exemplo

Intervalo não é o mesmo que incremento

Continue restaurando os valores de referência entre as tentativas. Faça uma tentativa de envio com cada valor indicado:

| Campo e valor testado | Resultado esperado |
| --- | --- |
| Quantidade: 0; depois, 12. | Bloqueio por estar abaixo de 2 ou acima de 10. |
| Quantidade: 5. | Bloqueio: está no intervalo, mas não se alinha aos incrementos de 2 a partir do mínimo 2. |
| Data: 09/05/2027; depois, 21/05/2027. | Bloqueio por estar fora do período, caso a interface permita inserir essas datas. |

Se o controle impedir a entrada ou a seleção de um valor fora do intervalo, registre isso como prevenção de entrada. Não é necessário forçar a interface.

Agora tente sem violar as restrições

Restaure todos os valores de referência e clique em Testar envio local.

O esperado é não haver bloqueio nativo. O navegador pode navegar ou recarregar o documento local. Se os campos forem limpos, isso não significa que os dados foram salvos.

Dica

Sem bloqueio não significa processado

A ausência de bloqueio permite prosseguir com a tentativa de envio. Navegar ou recarregar o arquivo não comprova recebimento nem processamento dos dados.

Registre o que aconteceu

Três comportamentos diferentes

Informe o navegador usado e relate:

  1. Uma tentativa inválida: qual campo e valor você testou, o que esperava e o que observou?
  2. O que aconteceu ao tentar digitar a nona letra no apelido? Foi necessário tentar enviar para perceber o limite?
  3. O que aconteceu com todos os valores de referência? Isso comprova processamento dos dados?

Não é necessário copiar mensagens literalmente. Se algum resultado foi diferente do esperado, descreva a diferença.

Escreva pelo menos 80 caracteres (0/80).

Passo 8 de 9

Reconhecer os limites da validação no navegador

Diferencie atender às restrições do formulário, comprovar uma informação e validar os dados no servidor.

Formato aceito não comprova a informação

Um valor pode atender às restrições do campo sem corresponder à realidade ou cumprir todas as regras do serviço.

Exemplo

O que ainda não foi comprovado

  • E-mail: um formato aceito por type="email" não comprova que o endereço existe nem que pertence à pessoa que o informou.
  • URL: um formato aceito por type="url" não comprova que o destino existe ou é confiável.
  • Quantidade: um pedido dentro do limite permitido pode superar o estoque disponível.
  • Data: uma data de nascimento dentro do período permitido pode não ser a verdadeira.

Qual conclusão é justificada?

Na tentativa de envio, o navegador não apontou erros nos campos de e-mail e URL. O que essa verificação permite concluir?

O servidor precisa validar novamente

A verificação do formulário pode ser contornada

Requisições podem chegar ao servidor sem passar pelas restrições do formulário. Por isso, o servidor precisa validar os dados recebidos e as regras aplicáveis ao serviço, independentemente de o navegador ter apresentado erros.

Por exemplo: além de conferir o limite de quantidade, um serviço de reservas precisa verificar a disponibilidade.

Atenção

Transporte protegido não torna os dados válidos

HTTPS protege o transporte, mas não torna os valores verdadeiros ou válidos. Validar a entrada é necessário, porém também não garante, por si só, toda a segurança da aplicação.

Julgue a decisão do serviço

Um serviço recebe por HTTPS uma reserva de 4 unidades, sem erros no navegador e dentro do limite de 1 a 5 do formulário. Nessas condições, o servidor pode dispensar a validação da quantidade e da disponibilidade.

Passo 9 de 9

Aplicar e revisar um formulário com instruções claras

Ajuste um formulário local, compare uma tentativa bloqueada com outra sem bloqueio e justifique os limites da validação nativa.

Corrija as divergências

Seu desafio final

Copie o documento abaixo para um arquivo chamado revisao.html no seu computador. Ele contém divergências intencionais. No seu editor, ajuste os atributos e as instruções conforme os requisitos, preservando os rótulos.

Use apenas dados fictícios. A tentativa de envio aponta para o próprio documento, sem serviço remoto nem processamento no servidor.

Exemplo

Requisitos para a revisão

  • Todos os campos são obrigatórios, com indicação visível.
  • Apelido: de 3 a 12 caracteres.
  • E-mail: formato verificado por type="email".
  • Quantidade: de 2 a 10 unidades, em incrementos de 2 a partir de 2.
  • Cada campo mantém seu label e referencia sua instrução visível com aria-describedby.
  • Os textos de ajuda devem corresponder aos atributos.

Documento inicial para edição local

html
<!doctype html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Treino de validação</title>
</head>
<body>
  <main>
    <h1>Pedido fictício</h1>
    <p>Use somente dados fictícios. Este formulário não registra pedidos.</p>

    <form method="get">
      <p>
        <label for="apelido">Apelido (obrigatório)</label>
        <input type="text" id="apelido" name="apelido"
               minlength="2" maxlength="12"
               aria-describedby="ajuda-apelido">
      </p>
      <p id="ajuda-apelido">Use de 2 a 12 caracteres.</p>

      <p>
        <label for="email">E-mail (obrigatório)</label>
        <input type="email" id="email" name="email" required
               aria-describedby="ajuda-email">
      </p>
      <p id="ajuda-email">Informe um endereço no formato pessoa@example.com.</p>

      <p>
        <label for="quantidade">Quantidade (obrigatória)</label>
        <input type="number" id="quantidade" name="quantidade" required
               min="2" max="10" step="1"
               aria-describedby="#ajuda-quantidade">
      </p>
      <p id="ajuda-quantidade">De 2 a 10 unidades, em incrementos de 1.</p>

      <button type="submit">Testar preenchimento</button>
    </form>
  </main>
</body>
</html>

Teste e registre o resultado

Duas tentativas, uma mudança

Salve as correções e abra ou atualize o arquivo no navegador.

  1. Digite Lia no apelido, pessoa@example.com no e-mail e 3 na quantidade. Clique em “Testar preenchimento”. Esperado: bloqueio na quantidade, pois 3 está no intervalo, mas não atende ao incremento.
  2. Altere apenas a quantidade para 4 e tente novamente. Esperado: ausência de bloqueio nativo.

Observe o comportamento, não uma frase específica da mensagem. Um eventual recarregamento local não comprova processamento dos dados. Se o resultado divergir do esperado, revise as correções e repita.

Seu registro de revisão

Relate quais atributos e textos você corrigiu e como preservou as associações dos campos. Registre os dados usados, o resultado esperado e o observado em cada tentativa. Por fim, explique por que a tentativa sem bloqueio não dispensa a validação no servidor.

Escreva pelo menos 100 caracteres (0/100).

Critérios para concluir

Resumo

Confira sua versão final

Compare estes critérios com o arquivo que você revisou.

  • Obrigatoriedade: os três campos têm required e indicação textual visível.
  • Restrições: apelido com minlength="3" e maxlength="12"; e-mail com type="email"; quantidade com min="2", max="10" e step="2".
  • Orientação: as ajudas correspondem às restrições. Na quantidade, os valores permitidos são 2, 4, 6, 8 e 10 unidades.
  • Associações: os labels foram preservados; aria-describedby referencia o id de cada ajuda, sem #.
  • Limites: orientar o preenchimento, conferir restrições no navegador e validar dados no servidor são responsabilidades diferentes. Nenhuma delas, isoladamente, garante segurança.

Tutorial concluído

Parabéns! Você concluiu: Aplicar validação nativa com instruções claras

Você concluiu “Aplicar validação nativa com instruções claras”. Leve esta rotina aos seus formulários: configurar restrições, orientar antes do erro, testar e reconhecer o que o navegador não garante.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso