ID del formulario

Campos y validación

Define los campos una vez e Ikiform valida cada envío en el servidor, con mensajes claros y valores tipados.

Los campos son opcionales. Un formulario sin campos acepta cualquier dato que envíe tu formulario. En cuanto publicas campos, Ikiform valida cada envío contra ellos en el servidor, rechaza los datos incorrectos con mensajes claros y guarda valores limpios y tipados.

Definir campos

Abre un formulario en el panel y ve a Fields. Añade campos en el editor visual o edita directamente la definición JSON. El id de cada campo es el name del input que debe enviar tu formulario.

Definición del formulario
{
  "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." }
}

La definición

ClaveObligatoriaReglas
versionSíSiempre 1
titleSíDe 1 a 200 caracteres
descriptionNoHasta 2000 caracteres
fieldsSíDe 1 a 100 campos con ids únicos, como máximo 2000 opciones en total
settings.submit_labelNoDe 1 a 100 caracteres, lo usan renderizadores como el componente de shadcn/ui
settings.success_messageNoDe 1 a 1000 caracteres
settings.redirect_urlNoUna URL http: o https: de hasta 2048 caracteres
$schemaNoCualquier cadena de hasta 200 caracteres, se ignora

Las claves desconocidas se rechazan, tanto en el nivel superior como en cada campo, así que una errata como requried aparece como error al guardar.

Claves de cada campo

ClaveObligatoriaReglas
idSísnake_case en minúsculas, empieza con una letra, como máximo 64 caracteres, por ejemplo team_size
typeSíUno de los 12 tipos de abajo
labelSíDe 1 a 200 caracteres. Se usa en las páginas de error y en los emails de notificación
requiredNotrue hace que un valor vacío sea un error
placeholderNoHasta 200 caracteres
help_textNoHasta 1000 caracteres

Playground

201 Created: el servidor lo guardaría

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

Ejecuta el validador de Ikiform en tu navegador. Los campos que empiezan con guion bajo están reservados y se descartan antes de validar, igual que en el servidor.

Tipos de campo

TipoSe guarda comoAcepta
textstringCualquier texto de una línea
textareastringTexto de varias líneas
emailstring, con el dominio en minúsculasUna dirección de email
numbernumberNúmeros, o cadenas numéricas desde formularios HTML
selectstringUn valor de opción de la lista
radiostringUn valor de opción de la lista
multi_selectstring[]Valores de opción de la lista, sin duplicados
checkboxbooleanon, true, 1, yes, o nada
datestring, YYYY-MM-DDUna fecha real del calendario
urlstring, normalizadaUna dirección web, se añade https:// si falta
phonestringDígitos, espacios, + ( ) . -
ratingintegerUn número entero de 1 a max

text

validationValoresPor defecto
min_lengthDe 0 a 10 000Ninguno
max_lengthDe 1 a 10 000, o como máximo 256 con un patrón1000, o 256 con un patrón
patternUna expresión regular de hasta 200 caracteres, que se compara con el valor completoNinguno
pattern_messageDe 1 a 200 caracteresInvalid format

Los patrones se ejecutan con la flag u y deben coincidir con el valor completo. Al guardar, Ikiform rechaza los patrones que podrían provocar un backtracking catastrófico: referencias inversas, grupos repetidos que contienen repeticiones o alternativas ((a+)+, (a|b)*) y demasiadas repeticiones anidadas.

textarea

ClaveValoresPor defecto
validation.min_lengthDe 0 a 16 000Ninguno
validation.max_lengthDe 1 a 16 00010 000
rowsDe 1 a 50, una indicación de visualización para los renderizadoresNinguno

email

validationValoresPor defecto
allowed_domainsDe 1 a 100 dominios como example.com, con coincidencia exactaCualquier dominio

Las direcciones de más de 254 caracteres se rechazan. La parte del dominio se guarda en minúsculas; la parte antes de @ se conserva tal como se envió.

number

validationValoresPor defecto
minCualquier númeroNinguno
maxCualquier número, como mínimo minNinguno
integertrue para rechazar decimalesfalse

select, radio y multi_select

ClaveValoresPor defecto
optionsDe 1 a 500 objetos { "value", "label" } con valores únicos, cada uno de 1 a 200 caracteresObligatoria
validation.min_itemsSolo multi_select, de 0 a 5000, o 1 si es obligatorio
validation.max_itemsSolo multi_select, de 1 a 500El número de opciones

Solo se aceptan los valores de la lista. select y radio aceptan un valor; envía multi_select como nombres repetidos, name[] o un array JSON.

checkbox

Sin claves extra. Una checkbox ausente es false. required: true significa que debe estar marcada, lo que sirve para las casillas de consentimiento. Los valores distintos de on, true, 1, yes, off, false, 0, no o vacío se rechazan.

date

validationValoresPor defecto
minUna fecha YYYY-MM-DDNinguno
maxUna fecha YYYY-MM-DD, igual o posterior a minNinguno

url

validationValoresPor defecto
https_onlytrue para rechazar http:false
max_lengthDe 1 a 40962048

Solo se aceptan URL http: y https: con un nombre de host con puntos y sin usuario ni contraseña. El valor guardado es la URL normalizada.

phone

validationValoresPor defecto
e164true para exigir el formato internacional, guardado sin separadoresfalse

Sin e164, un número de teléfono necesita de 6 a 15 dígitos y se guarda tal como se envió. Con él, +1 (415) 555-0123 se guarda como +14155550123.

rating

validationValoresPor defecto
maxDe 2 a 105

Conversión de tipos

Los formularios HTML lo envían todo como texto. Ikiform lo convierte al tipo que declara cada campo antes de guardarlo. Con name como texto, email, guests como número, newsletter como checkbox, site como URL y phone como campo de teléfono:

Enviado, urlencoded
name=++Ada+Lovelace++&email=Ada@Example.COM&guests=3&newsletter=on&site=example.com&phone=%2B1%20415%20555%200123
Guardado, con phone en e164
{
  "name": "Ada Lovelace",
  "email": "Ada@example.com",
  "guests": 3,
  "newsletter": true,
  "site": "https://example.com/",
  "phone": "+14155550123"
}
  • Los valores se recortan. Una cadena vacía cuenta como ausente.
  • Un campo que espera un valor rechaza un array con más de un elemento.
  • Los números aceptan notación decimal y exponencial de hasta 64 caracteres, como 3, -2.5 o 1e3.

Errores de validación

Un envío que no pasa la validación se rechaza con 422 validation_failed y no se guarda nada. error.fields relaciona cada id de campo con sus mensajes. Los envíos del navegador ven los mismos mensajes en una página de error alojada, con las etiquetas de tus 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 desconocidos

Con campos definidos, cualquier campo que no esté en la definición se rechaza como Unknown field "name". Los campos reservados que empiezan con _, el honeypot y cf-turnstile-response no cuentan. Sin definición, se acepta cualquier nombre de campo.

Mensajes

ProblemaMensaje
Falta un valor obligatorioThis field is required
Checkbox obligatoria sin marcarThis box must be checked
Demasiado corto o demasiado largoMust be at least 10 characters, Must be at most 120 characters
No coincide con el patrónTu pattern_message, o Invalid format
EmailEnter 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
OpcionesChoose one of the listed options, Choose at least 2 options, Choose at most 3 options
FechaEnter a valid date (YYYY-MM-DD), Must be on or after 2026-01-01
URLEnter a valid URL, Enter a valid https:// URL
TeléfonoEnter a valid phone number, Use international format, e.g. +14155550123
ValoraciónChoose a rating, Rating must be at most 5

Validar en el navegador

El validate del SDK replica las reglas y los mensajes del servidor para los 12 tipos de campo, así que puedes mostrar errores antes de enviar. El servidor sigue siendo la fuente de verdad. Consulta validate.