Validação de formulários


Um formulário coleta dados de pessoas, e pessoas deixam campos em branco, digitam um e-mail errado ou colocam letras onde deveria haver um número. Você não quer que esses dados cheguem ao seu código sem qualquer verificação. Antes de qualquer envio, o navegador consegue checar boa parte disso para você, mas só se você descrever o que cada campo espera receber. Essa descrição é escrita direto no seu HTML, e este capítulo é sobre como escrevê-la.
Campos obrigatórios e tipos de entrada
As duas verificações mais baratas que você pode adicionar são dizer que um campo precisa ser preenchido e dizer que tipo de valor deve ir nele.
Adicione a palavra required a um input e o navegador se recusa a enviar o formulário até que esse campo tenha algo preenchido. Você não escreve nenhum código para isso funcionar. O atributo já é a instrução.
<input type="text" name="full_name" required>A outra parte é o atributo type. Ele diz ao navegador que formato o valor deve ter, e o navegador verifica isso para você. Use type="email" e o navegador garante que o valor se pareça com um endereço de e-mail. Use type="number" e ele só aceita números. Existe um tipo para datas, um para endereços da web, e vários outros.
Pense em um formulário de consultório médico em que algumas caixas estão marcadas como "obrigatório preencher" e a caixa de data já vem com espacinhos separados para dia, mês e ano. O papel avisa o que vai em cada lugar antes mesmo de você escrever qualquer coisa.
Aqui está um pequeno formulário de cadastro usando os dois atributos:
<form>
<label>
Endereço de e-mail
<input type="email" name="email" required>
</label>
<label>
Site
<input type="url" name="website">
</label>
<button>Cadastrar</button>
</form>O campo de e-mail precisa ser preenchido e precisa se parecer com um e-mail. O campo do site é opcional, mas, se alguém digitar algo, precisa se parecer com um endereço da web. O navegador verifica os dois no momento em que o botão é pressionado.
required em um campo e o navegador não deixa passar um campo vazio. Defina o type, como email ou number, e ele verifica se o valor tem o formato certo. Escolha o tipo que combina com o campo e você ganha a verificação de graça. Atributos de restrição
Além de "preenchido" e "tipo certo", muitas vezes você quer limites: um valor com no mínimo tal tamanho, um número não maior que tal valor, um código em um formato específico. Um punhado de atributos cobre isso.
Você pode definir limites para o que um campo aceita. Dois úteis para começar:
<input type="text" name="username" maxlength="20">
<input type="number" name="quantity" min="1" max="10">maxlength="20" impede que o campo passe de vinte caracteres. min e max definem o menor e o maior número permitido. O navegador mantém as pessoas dentro desses limites, então você não precisa verificar isso sozinho.
A regra que evita mais confusão do que qualquer outra: um pattern precisa corresponder ao valor inteiro, não só a uma parte dele.
<input
type="text"
name="product_code"
pattern="[A-Z]{2}-[0-9]{3}"
title="Duas letras, um hífen, três dígitos, por exemplo AB-123"
required
>maxlength limita quantos caracteres entram, e min e max cercam um número. O navegador mantém as pessoas dentro desses limites automaticamente, o que representa muita verificação que você nunca precisa escrever. Feedback nativo de validação
Declarar as regras é só metade da história. A outra metade é o que a pessoa vê quando um valor infringe uma delas.
Quando alguém pressiona o botão de envio e um campo está errado, o navegador interrompe o envio e mostra uma pequena mensagem ao lado do primeiro campo com problema, e leva o cursor até ele. Você não precisa criar essa mensagem. O navegador a escreve, no idioma do próprio visitante, e a mostra automaticamente.
Assim, um campo de e-mail required deixado em branco produz algo como "Preencha este campo", e o formulário não é enviado até que isso seja corrigido.
Quando você ainda precisa de JavaScript
A validação nativa verifica um campo contra suas próprias regras. Muitas verificações reais não se encaixam nesse formato, e é aí que o JavaScript entra em cena.
Há coisas que o navegador não consegue verificar por conta própria. Se dois campos de senha coincidem entre si. Se um nome de usuário já foi usado por outra pessoa. Se um código de desconto é real. Nenhuma dessas situações depende só do formato de um campo, então não existe atributo para elas, e você recorre ao JavaScript para fazer essa verificação.
Isso não é uma falha do HTML. As verificações embutidas cuidam dos casos comuns sem nenhum código, e o JavaScript cuida do resto.

