ID do formulário

Campos e validação

Defina os campos uma vez e o Ikiform valida cada envio no servidor, com mensagens claras e valores tipados.

Campos são opcionais. Um formulário sem campos aceita quaisquer dados que o seu formulário enviar. Depois que você publica os campos, o Ikiform valida cada envio contra eles no servidor, rejeita dados ruins com mensagens claras e armazena valores limpos e tipados.

Definindo campos

Abra um formulário no painel e vá em Fields. Adicione campos no editor visual ou edite a definição JSON diretamente. O id de cada campo é o name do input que o seu formulário precisa enviar.

Definição do formulário
{
  "version": 1,
  "title": "Contact",
  "fields": [
    { "id": "name", "type": "text", "label": "Name", "required": true, "validation": { "max_length": 120 } },
    { "id": "email", "type": "email", "label": "Email", "required": true },
    {
      "id": "topic",
      "type": "select",
      "label": "Topic",
      "options": [
        { "value": "sales", "label": "Sales" },
        { "value": "support", "label": "Support" }
      ]
    },
    { "id": "message", "type": "textarea", "label": "Message", "validation": { "min_length": 10 } }
  ],
  "settings": { "submit_label": "Send", "success_message": "Thanks, we'll reply within a day." }
}

A definição

ChaveObrigatórioRegras
versionSimSempre 1
titleSimDe 1 a 200 caracteres
descriptionNãoAté 2.000 caracteres
fieldsSimDe 1 a 100 campos com ids únicos, no máximo 2.000 opções no total
settings.submit_labelNãoDe 1 a 100 caracteres, usado por renderizadores como o componente shadcn/ui
settings.success_messageNãoDe 1 a 1.000 caracteres
settings.redirect_urlNãoUma URL http: ou https: com até 2.048 caracteres
$schemaNãoQualquer string com até 200 caracteres, ignorada

Chaves desconhecidas são recusadas, no nível superior e em cada campo, então um erro de digitação como requried aparece como erro quando você salva.

Chaves de todo campo

ChaveObrigatórioRegras
idSimsnake_case em minúsculas, começando com uma letra, com no máximo 64 caracteres, por exemplo team_size
typeSimUm dos 12 tipos abaixo
labelSimDe 1 a 200 caracteres. Usado nas páginas de erro e nos e-mails de notificação
requiredNãotrue faz um valor vazio ser erro
placeholderNãoAté 200 caracteres
help_textNãoAté 1.000 caracteres

Playground

201 Created: o servidor armazenaria isto

{
  "ok": true,
  "id": "sub_01k7v2c9t3e8m5q4x6z0a1b2c3"
}

Roda o próprio validador do Ikiform no seu navegador. Campos que começam com underscore são reservados e descartados antes da validação, como no servidor.

Tipos de campo

TipoArmazenado comoAceita
textstringQualquer texto de uma linha
textareastringTexto com várias linhas
emailstring, domínio em minúsculasUm endereço de e-mail
numbernumberNúmeros, ou strings numéricas vindas de formulários HTML
selectstringO valor de uma opção da lista
radiostringO valor de uma opção da lista
multi_selectstring[]Valores de opções da lista, sem duplicados
checkboxbooleanon, true, 1, yes, ou nada
datestring, YYYY-MM-DDUma data real do calendário
urlstring, normalizadaUm endereço web, com https:// adicionado quando falta
phonestringDígitos, espaços, + ( ) . -
ratingintegerUm número inteiro de 1 a max

text

validationValoresPadrão
min_lengthDe 0 a 10.000Nenhum
max_lengthDe 1 a 10.000, ou no máximo 256 com um pattern1.000, ou 256 com um pattern
patternUma expressão regular com até 200 caracteres, comparada com o valor inteiroNenhum
pattern_messageDe 1 a 200 caracteresInvalid format

Os patterns rodam com a flag u e precisam corresponder ao valor inteiro. Quando você salva, o Ikiform recusa patterns que poderiam causar backtracking catastrófico: backreferences, grupos repetidos que contêm repetições ou alternativas ((a+)+, (a|b)*) e repetições aninhadas demais.

textarea

ChaveValoresPadrão
validation.min_lengthDe 0 a 16.000Nenhum
validation.max_lengthDe 1 a 16.00010,000
rowsDe 1 a 50, uma dica de exibição para renderizadoresNenhum

email

validationValoresPadrão
allowed_domainsDe 1 a 100 domínios como example.com, comparados exatamenteQualquer domínio

Endereços com mais de 254 caracteres são recusados. A parte do domínio é armazenada em minúsculas; a parte antes do @ é mantida como foi enviada.

number

validationValoresPadrão
minQualquer númeroNenhum
maxQualquer número, no mínimo minNenhum
integertrue para recusar decimaisfalse

select, radio e multi_select

ChaveValoresPadrão
optionsDe 1 a 500 objetos { "value", "label" } com valores únicos, cada um com 1 a 200 caracteresObrigatório
validation.min_itemsSó multi_select, de 0 a 5000, ou 1 quando obrigatório
validation.max_itemsSó multi_select, de 1 a 500O número de opções

Só valores da lista são aceitos. select e radio aceitam um valor; envie multi_select como nomes repetidos, name[] ou um array JSON.

checkbox

Sem chaves extras. Um checkbox ausente é false. required: true significa que ele precisa estar marcado, o que serve para caixas de consentimento. Valores diferentes de on, true, 1, yes, off, false, 0, no ou vazio são recusados.

date

validationValoresPadrão
minUma data YYYY-MM-DDNenhum
maxUma data YYYY-MM-DD, igual ou posterior a minNenhum

url

validationValoresPadrão
https_onlytrue para recusar http:false
max_lengthDe 1 a 4.0962.048

Só URLs http: e https: com um nome de host com ponto e sem usuário ou senha são aceitas. O valor armazenado é a URL normalizada.

phone

validationValoresPadrão
e164true para exigir o formato internacional, armazenado sem separadoresfalse

Sem e164, um telefone precisa ter de 6 a 15 dígitos e é armazenado como foi enviado. Com ele, +1 (415) 555-0123 é armazenado como +14155550123.

rating

validationValoresPadrão
maxDe 2 a 105

Conversão de tipos

Formulários HTML enviam tudo como texto. O Ikiform converte cada valor para o tipo que o campo declara antes de armazenar. Com name como texto, email, guests como número, newsletter como checkbox, site como URL e phone como telefone:

Enviado, urlencoded
name=++Ada+Lovelace++&email=Ada@Example.COM&guests=3&newsletter=on&site=example.com&phone=%2B1%20415%20555%200123
Armazenado, com phone em e164
{
  "name": "Ada Lovelace",
  "email": "Ada@example.com",
  "guests": 3,
  "newsletter": true,
  "site": "https://example.com/",
  "phone": "+14155550123"
}
  • Os valores passam por trim. Uma string vazia conta como ausente.
  • Um campo que espera um valor recusa um array com mais de um item.
  • Números aceitam notação decimal simples e exponencial com até 64 caracteres, como 3, -2.5 ou 1e3.

Erros de validação

Um envio que falha na validação é rejeitado com 422 validation_failed e nada é armazenado. error.fields associa cada id de campo às suas mensagens. Envios pelo navegador veem as mesmas mensagens em uma página de erro hospedada, identificadas pelos rótulos dos seus campos.

422 Unprocessable Content
{
  "ok": false,
  "error": {
    "code": "validation_failed",
    "message": "Some fields are invalid.",
    "fields": {
      "email": ["Enter a valid email address"],
      "website": ["Unknown field \"website\""]
    }
  },
  "request_id": "req_01k7v2c9t3e8m5q4x6z0a1b2c3"
}

Campos desconhecidos

Com campos definidos, qualquer campo que não está na definição é rejeitado como Unknown field "name". Campos reservados que começam com _, o honeypot e cf-turnstile-response não contam. Sem definição, quaisquer nomes de campo são aceitos.

Mensagens

ProblemaMensagem
Valor obrigatório ausenteThis field is required
Checkbox obrigatório desmarcadoThis box must be checked
Curto ou longo demaisMust be at least 10 characters, Must be at most 120 characters
Pattern não correspondeO seu pattern_message, ou Invalid format
E-mailEnter a valid email address, Email must be at one of: example.com
NúmeroEnter a number, Enter a whole number, Must be at least 1
OpçõesChoose one of the listed options, Choose at least 2 options, Choose at most 3 options
DataEnter a valid date (YYYY-MM-DD), Must be on or after 2026-01-01
URLEnter a valid URL, Enter a valid https:// URL
TelefoneEnter a valid phone number, Use international format, e.g. +14155550123
AvaliaçãoChoose a rating, Rating must be at most 5

Validando no navegador

O validate do SDK espelha as regras e mensagens do servidor para os 12 tipos de campo, então você pode mostrar erros antes de enviar. O servidor continua sendo a fonte da verdade. Veja validate.