Validação

O FormKit torna a validação de front-end simples, permitindo que você declare suas regras de validação diretamente nos seus inputs. É fácil escrever regras personalizadas também, mas você raramente precisará disso com mais de 20 regras prontas para produção.

Declarando regras

Como Validar um Input - Curso da Vue School

8 mins

Declarar quais regras de validação se aplicam a um determinado input é tão simples quanto fornecer uma propriedade validation. As regras podem ser declaradas usando duas sintaxes:

Sintaxe de String

Regras de validação podem ser declaradas especificando cada nome de regra desejado separado por pipes |. Algumas regras também podem aceitar argumentos, que podem ser fornecidos após dois pontos :. Você pode usar vários argumentos separando-os por vírgulas:

Carregar exemplo ao vivo

Sintaxe de Array

Regras de validação também podem ser declaradas fornecendo um array. Cada elemento do array deve ser ele próprio um array onde o primeiro elemento é o nome da regra de validação em string, e os elementos restantes n são argumentos para essa regra.

Isso é especialmente útil se os argumentos fornecidos precisarem ser tipos de JavaScript reais — por exemplo, uma expressão regular (regex):

Carregar exemplo ao vivo

Mostrando erros

Regras de validação são sempre calculadas em tempo real — o que significa que um determinado campo sempre será válido ou inválido (é considerado inválido enquanto regras de validação assíncronas pendentes são executadas). No entanto — a visibilidade dos erros de validação é determinada pela propriedade validation-visibility.

VisibilidadeDescrição
blur(Padrão) Erros são mostrados após um usuário remover o foco de um input.
liveErros são sempre visíveis.
dirtyErros são mostrados após um usuário modificar o valor de um input.
submitErros são mostrados apenas após um usuário tentar enviar um formulário.
Envio de formulário

Se um input está dentro de um formulário, então qualquer mensagem de validação restante será exibida ao usuário final quando ele tentar enviar o formulário.

Definindo a visibilidade da validação para um grupo inteiro

Devido à herança de configuração do FormKit, você pode definir validation-visibility em um nível de form, group ou list usando a propriedade config, que ainda pode ser substituída individualmente em cada entrada:

Carregar exemplo ao vivo

Dicas de regras

Visão geral das dicas de regras de validação

2 mins

As regras de validação operam de acordo com algumas características padrão, que você pode alterar caso a caso com "dicas de regras":

  • Executar em sequência - as regras são executadas na ordem em que são declaradas. Quando uma regra falha, as regras restantes não são executadas. Por exemplo, se você declarar as regras de validação como required|length:5, então a regra length não será executada até que a regra required esteja sendo cumprida.
  • Ignoradas quando vazias - As regras de validação não são executadas quando a entrada está vazia (dentro das regras disponíveis, a regra required é a única exceção).
  • Síncronas - todas as regras disponíveis são síncronas e não possuem debounce.
  • Bloqueadoras - todas as regras de validação produzem mensagens bloqueadoras que impedem a submissão do formulário.

As características acima podem ser modificadas ao declarar suas regras usando "dicas". Dicas de regras são pequenos caracteres modificadores que você anexa ao início de uma declaração de regra para alterar seu comportamento padrão:

DicaNomeDescrição
(200)DebounceAplica debounce na regra de validação pelo número dado de milissegundos.
+EmptyExecuta a regra de validação mesmo se a entrada estiver vazia (mas não força a regra).
*ForceExecuta a regra de validação mesmo se uma regra anterior falhou.
?OptionalTorna uma regra de validação opcional (ela é não bloqueadora, significando que o formulário ainda pode ser enviado).

Debounce (milli)

Às vezes faz sentido aplicar debounce nas suas regras de validação. Para fazer isso, use a dica de debounce — um parêntese contendo uma duração em milissegundos — antes da sua regra:

Carregar exemplo ao vivo

+ Vazio

Às vezes você quer que uma regra de validação seja executada mesmo quando uma entrada está vazia. Você pode usar a dica de vazio + para isso:

Carregar exemplo ao vivo

Forçar *

A dica de forçar garante que uma regra de validação será executada mesmo se uma regra definida antes dela falhar (nota: isso não significa que ela será executada quando uma entrada estiver vazia). Observe como este exemplo exibirá ambas as mensagens de length e email:

Carregar exemplo ao vivo

Opcional ?

A dica opcional permite que uma regra de validação falha não impeça o envio do formulário. Neste exemplo, observe como o formulário não será enviado se as regras required ou confirm falharem, mas será enviado se a regra de length com dica opcional falhar:

Carregar exemplo ao vivo
Combinando dicas

Você pode usar dicas de regras juntas. Para fazer isso, basta colocar várias dicas antes da declaração da regra: required|*+(200)min:10.

Regras disponíveis

O FormKit vem com mais de 20 regras de validação prontas para produção, cobrindo a maioria das necessidades de validação. Se você não encontrar uma que atenda ao seu requisito exato, você pode adicionar uma regra personalizada para atender às suas necessidades.

Accepted

O valor deve ser yes, on, 1 ou true. Útil para entradas de caixa de seleção — frequentemente onde você precisa validar se alguém aceitou os termos.

Carregar exemplo ao vivo

Alpha

Verifica se um valor contém apenas caracteres alfabéticos. Existem dois conjuntos de caracteres: latim e padrão. Caracteres latinos são estritamente [a-zA-Z], enquanto o conjunto padrão inclui a maioria dos caracteres acentuados, como ä, ù ou ś.

Carregar exemplo ao vivo

Alfanumérico

Verifica se um valor é composto apenas por caracteres alfabéticos ou dígitos numéricos. Para a parte alfabética, você pode passar default ou latin - veja alpha acima.

Carregar exemplo ao vivo

Alpha-espaces

Verifica se um valor é composto apenas por caracteres alfabéticos ou espaços. Para a parte alfabética, você pode passar default ou latin - veja alpha acima.

Carregar exemplo ao vivo

Entre

Verifica se um número está (inclusivamente) entre dois outros números. O valor de entrada deve ser um número, ou a regra de validação falhará.

Carregar exemplo ao vivo

Confirmar

Verifica se o valor de uma entrada corresponde ao valor de outra entrada — frequentemente usado para confirmações de senha. Existem duas maneiras de especificar qual entrada corresponder:

  • Acrescente _confirm ao atributo name da segunda entrada.
  • Passe o name da primeira entrada como um argumento para a regra de confirmação na segunda entrada confirm:name_of_input_1 (mais específico).

Nota: as duas entradas devem estar no mesmo group ou form.

Carregar exemplo ao vivo

Contém Alpha

Verifica se um valor contém caracteres alfabéticos. Existem dois conjuntos de caracteres: latim e padrão. Caracteres latinos são estritamente [a-zA-Z], enquanto o conjunto padrão inclui a maioria dos caracteres acentuados, como ä, ù ou ś.

Carregar exemplo ao vivo

Contém Alfanumérico

Verifica se um valor contém caracteres alfabéticos ou dígitos numéricos. Para a parte alfabética, você pode passar default ou latin - veja contains alpha acima.

Carregar exemplo ao vivo

Contém Espaços Alfabéticos

Verifica se um valor contém caracteres alfabéticos ou espaços. Para a parte alfabética, você pode passar default ou latin - veja contém alfa acima.

Carregar exemplo ao vivo

Contém Minúsculas

Verifica se um valor contém um caractere minúsculo. Existem dois conjuntos de caracteres: latino e default. Caracteres latinos são estritamente [a-zA-Z], enquanto o conjunto default inclui a maioria dos caracteres acentuados, como ä, ù ou ś.

Carregar exemplo ao vivo

Contém Numérico

Verifica se um valor contém um número.

Carregar exemplo ao vivo

Contém Símbolo

Verifica se um valor contém um símbolo.

Carregar exemplo ao vivo

Contém Maiúsculas

Verifica se um valor contém um caractere maiúsculo. Existem dois conjuntos de caracteres: latino e default. Caracteres latinos são estritamente [a-zA-Z], enquanto o conjunto default inclui a maioria dos caracteres acentuados, como ä, ù ou ś.

Carregar exemplo ao vivo

Data após

Determina se uma data é posterior à data atual ou a uma data fornecida como argumento da regra. As datas utilizadas podem ser objetos Date do JavaScript ou strings que podem ser analisadas por Date.parse().

Carregar exemplo ao vivo

Data antes

Determina se uma data é anterior à data atual ou a uma data fornecida como argumento da regra. As datas utilizadas podem ser objetos Date do JavaScript ou strings que podem ser analisadas por Date.parse().

Carregar exemplo ao vivo

Data entre

Determina se uma data está entre (e incluindo) as duas datas fornecidas como argumentos da regra. As datas utilizadas podem ser objetos Date do JavaScript ou strings que podem ser analisadas por Date.parse().

Carregar exemplo ao vivo

Formato de data

Garante que o formato da data de uma entrada corresponda a um formato de data específico. O formato deve ser especificado usando os seguintes tokens de formatação:

TokenValores válidos
MMRepresentação de mês com dois dígitos (01-12)
MRepresentação de mês com um dígito (1-12), zero à esquerda permitido
DDDia do mês com dois dígitos (01-31)
DDia do mês com um dígito (1-31), zero à esquerda permitido
YYAno com dois dígitos
YYYYAno com quatro dígitos
warning

Entradas de data nativas sempre geram o mesmo formato YYYY-MM-DD ... mesmo que exibam datas de acordo com a localidade do navegador. Usar esta regra para especificar um formato diferente resultaria em uma entrada que nunca poderia ser válida.

Carregar exemplo ao vivo

Email

Verifica se a entrada contém um endereço de email válido.

Carregar exemplo ao vivo

Termina com

Verifica se o valor da entrada termina com uma determinada substring.

Carregar exemplo ao vivo

É

Verifica se o valor da entrada corresponde a pelo menos um dos argumentos fornecidos.

Carregar exemplo ao vivo

Comprimento

Verifica se o valor da entrada tem um comprimento superior a um valor dado, ou entre dois valores de comprimento. Funciona para validar arrays (como listas), objetos (como grupos) ou comprimentos de strings. Pode ser usado para simular os atributos nativos maxlength e minlength.

Carregar exemplo ao vivo

Minúsculas

Verifica se um valor consiste apenas de caracteres minúsculos. Existem dois conjuntos de caracteres: latim e padrão. Caracteres latinos são estritamente [a-zA-Z], enquanto o conjunto padrão inclui a maioria dos caracteres acentuados, como ä, ù ou ś.

Carregar exemplo ao vivo

Corresponde

Verifica se a entrada corresponde a um valor ou padrão específico. Se você passar vários argumentos, ele verifica cada um até encontrar uma correspondência.

Carregar exemplo ao vivo

Em vez de passar strings dentro da propriedade de validação para correspondência simples, você pode modelar seu argumento com barras / para passar sua própria expressão regular.

Carregar exemplo ao vivo

Ao usar a Sintaxe de String você não pode escapar caracteres usados para definir as próprias regras de validação (|,:). Para usar esses caracteres em suas expressões regulares, você deve usar a alternativa Sintaxe de Array.

Carregar exemplo ao vivo

Max

Verifica se um Number é menor ou igual a um valor máximo. O valor máximo padrão é 10.

Carregar exemplo ao vivo

Você também pode usar essa regra para validar se o comprimento de um Array é menor ou igual a um valor máximo.

Carregar exemplo ao vivo

Min

Verifica se um Number é maior ou igual a um valor mínimo. O valor mínimo padrão é 1.

Carregar exemplo ao vivo

Você também pode usar essa regra para validar se o comprimento de um Array é maior ou igual a um valor mínimo.

Carregar exemplo ao vivo

Not

Verifica para garantir que os dados de entrada não correspondam a um conjunto de valores predefinidos.

Carregar exemplo ao vivo

Number

Verifica se a entrada é um número válido conforme avaliado por isNaN().

Carregar exemplo ao vivo

Required

Verifica se a entrada está vazia.

Carregar exemplo ao vivo

Se você não quiser que espaços em branco façam a regra required passar, você pode passar trim como um argumento para a regra:

Carregar exemplo ao vivo

Require One

Verifica múltiplas entradas e passa se alguma delas tiver um valor.

Nota: as duas entradas devem estar no mesmo group ou form.

Carregar exemplo ao vivo

Starts With

Verifica se a entrada começa com uma das opções fornecidas.

Carregar exemplo ao vivo

Symbol

Verifica se um valor consiste apenas de símbolos.

Carregar exemplo ao vivo

Uppercase

Verifica se um valor consiste apenas de caracteres maiúsculos. Existem dois conjuntos de caracteres: latim e padrão. Caracteres latinos são estritamente [a-zA-Z], enquanto o conjunto padrão inclui a maioria dos caracteres acentuados, como ä, ù ou ś.

Carregar exemplo ao vivo

URL

Verifica se o valor de entrada parece ser uma URL formatada corretamente, incluindo o protocolo. Isso não verifica se a URL realmente resolve.

Carregar exemplo ao vivo

Regras personalizadas

Regras de validação são funções que aceitam um nó central e retornam um valor booleano — true para aprovado e false para reprovado. Além disso, quaisquer argumentos passados para a regra de validação estão disponíveis como argumentos 1-n. Escrever a sua própria é simples — por exemplo:

/**
 * Arquivo: my-custom-rules/monday.js
 *
 * Uma regra de validação forçada que garante que o valor de entrada seja monday ou mon.
 */
const monday = function (node) {
  return node.value === 'monday' || node.value === 'mon'
}

export default monday

Definindo comportamentos de regras personalizadas

Como mencionado na seção dicas de regras de validação, regras de validação — incluindo suas regras personalizadas — operam de acordo com comportamentos padrão: elas são executadas em sequência, são ignoradas quando o valor de entrada está vazio, são síncronas e são bloqueantes. Se você quiser que os padrões da sua regra operem de maneira diferente, você pode sobrescrever esses comportamentos na sua regra de validação personalizada:

/**
 * Uma regra de validação forçada que garante que o valor de entrada seja monday ou mon.
 */
const monday = function (node) {
  return node.value === 'monday' || node.value === 'mon'
}

// sobrescreve os comportamentos padrão da regra para a sua regra personalizada
monday.blocking = false
monday.skipEmpty = false
monday.debounce = 20 // milissegundos
monday.force = true

export default monday

Você também pode sobrescrever esses comportamentos caso a caso com dicas de regras.

Uma vez que você tenha escrito uma função de validação — você precisa registrar a regra de validação com o FormKit — globalmente ou especificamente em uma entrada.

Regras de validação para múltiplas entradas

Regras de validação podem depender de valores de outras entradas na árvore do seu formulário. Para fazer isso, use a travessia de nó para localizar outro nó e acessar seu valor:

Carregar exemplo ao vivo
Funções puras

Regras de validação devem sempre ser funções puras. Use apenas os argumentos passados e não realize quaisquer efeitos colaterais.

Adicionando uma regra globalmente

Para usar uma regra de validação em qualquer lugar do seu projeto, você pode especificá-la onde quer que seu plugin FormKit esteja registrado com o Vue.

import { createApp } from 'vue'
import App from './App.vue'
import { plugin, defaultConfig } from '@formkit/vue'
import monday from './my-custom-rules/monday'

// prettier-ignore
createApp(App).use(plugin, defaultConfig({
  rules: { monday },
})).mount('#app')

Uma vez instalada, você pode usar sua regra de validação em qualquer lugar do seu projeto.

<FormKit validation="required|monday" />

Para personalizar a mensagem de erro que aparece quando sua validação personalizada falha, siga as instruções aqui.

Adicionando uma regra via prop

Para adicionar uma validação a um input específico, use a prop validation-rules.

Carregar exemplo ao vivo
Mensagem personalizada

Suas regras personalizadas provavelmente precisarão de uma mensagem personalizada — a próxima seção da documentação vai abordar isso.

Mensagens personalizadas

Existem várias maneiras de personalizar sua mensagem de validação. A mais básica é usar a prop validation-label — permitindo que você altere o nome do campo conforme usado nas mensagens de validação predefinidas.

Carregar exemplo ao vivo

Se você precisar ser mais específico, tem duas opções:

  • Substituir a mensagem de uma regra usando uma prop.
  • Substituir globalmente a mensagem de uma regra de validação.

Prop de mensagem de validação

Você pode facilmente substituir mensagens de validação diretamente no seu input FormKit fornecendo um objeto de strings ou funções.

Usando strings

Para substituir uma mensagem de validação em um único input FormKit, adicione a prop validation-messages com um objeto de nomes de regras e a mensagem correspondente.

Carregar exemplo ao vivo

Usando funções

Se você precisar de mais poder para suas regras de validação, pode usar uma função em vez de uma string. A função recebe um objeto de contexto.

Objeto de contexto da mensagem de validação:
ComportamentoDescrição
argsUm array de argumentos passados para a regra. Por exemplo 'Vue', 'React', 'Angular' da regra is:Vue,React,Angular.
nameO nome do campo (primeiro disponível de: validation-label, label, depois name).
nodeO núcleo node do FormKit.

Vamos reescrever o exemplo acima usando uma função em vez de uma string para ainda mais controle da prop validation-messages:

Carregar exemplo ao vivo

Mensagem de validação global

Se houver mensagens de regras de validação que você gostaria de substituir (ou adicionar) em todo o seu projeto, você pode definir essas regras de mensagens ao registrar o FormKit sob a chave de idioma que deseja substituir:

import { createApp } from 'vue'
import App from './App.vue'
import { plugin, defaultConfig } from '@formkit/vue'
import monday from './my-custom-rules/monday'

// prettier-ignore
createApp(App).use(plugin, defaultConfig({
  messages: {
    en: {
      validation: {
        required({ name }) {
          return `Por favor, preencha o campo ${name}.`
        }
      }
    }
  }
})).mount('#app')

Movendo mensagens de validação

Se você deseja renderizar as mensagens de validação de um input fora do componente <FormKit />, você pode utilizar o componente <FormKitMessages /> passando o nó do input como prop. Usar este componente desabilita a exibição padrão das mensagens (localizadas abaixo do input) e as move para onde o componente <FormKitMessages /> está localizado:

Carregar exemplo ao vivo

Extraindo mensagens

O componente <FormKitSummary>

O FormKit 1.0.0 introduziu o componente FormKitSummary que oferece uma solução "pronta para uso" para exibir todas as mensagens de validação em um determinado formulário ou subárvore.

Para obter todas as mensagens de validação do núcleo do input, você pode usar a função getValidationMessages exportada de @formkit/validation. Esta função verificará recursivamente o nó fornecido e todos os filhos em busca de mensagens de validação e retornará um Map de nós centrais para mensagens de validação, tornando-a ideal para uso com formulários:

Carregar exemplo ao vivo