Formular-ID

Felder und Validierung

Definiere Felder einmal, und Ikiform validiert jede Einsendung auf dem Server, mit klaren Meldungen und typisierten Werten.

Felder sind optional. Ein Formular ohne Felder akzeptiert alle Daten, die dein Formular sendet. Sobald du Felder veröffentlichst, validiert Ikiform jede Einsendung auf dem Server dagegen, lehnt fehlerhafte Daten mit klaren Meldungen ab und speichert saubere, typisierte Werte.

Felder definieren

Öffne ein Formular im Dashboard und gehe zu Fields. Füge Felder im visuellen Editor hinzu oder bearbeite die JSON-Definition direkt. Die id jedes Felds ist der Input-name, den dein Formular senden muss.

Formulardefinition
{
  "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." }
}

Die Definition

SchlüsselPflichtRegeln
versionJaImmer 1
titleJa1 bis 200 Zeichen
descriptionNeinBis zu 2.000 Zeichen
fieldsJa1 bis 100 Felder mit eindeutigen IDs, insgesamt höchstens 2.000 Optionen
settings.submit_labelNein1 bis 100 Zeichen, genutzt von Renderern wie der shadcn/ui-Komponente
settings.success_messageNein1 bis 1.000 Zeichen
settings.redirect_urlNeinEine http:- oder https:-URL mit bis zu 2.048 Zeichen
$schemaNeinBeliebiger String mit bis zu 200 Zeichen, wird ignoriert

Unbekannte Schlüssel werden abgelehnt, auf oberster Ebene und bei jedem Feld, sodass ein Tippfehler wie requried beim Speichern als Fehler erscheint.

Schlüssel jedes Felds

SchlüsselPflichtRegeln
idJasnake_case in Kleinbuchstaben, beginnt mit einem Buchstaben, höchstens 64 Zeichen, zum Beispiel team_size
typeJaEiner der 12 Typen unten
labelJa1 bis 200 Zeichen. Wird in Fehlerseiten und Benachrichtigungs-E-Mails verwendet
requiredNeintrue macht einen leeren Wert zum Fehler
placeholderNeinBis zu 200 Zeichen
help_textNeinBis zu 1.000 Zeichen

Playground

201 Created: Der Server würde das speichern

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

Führt den Validator von Ikiform in deinem Browser aus. Felder, die mit einem Unterstrich beginnen, sind reserviert und werden vor der Validierung verworfen, wie auf dem Server.

Feldtypen

TypGespeichert alsAkzeptiert
textstringBeliebiger einzeiliger Text
textareastringMehrzeiliger Text
emailstring, Domain in KleinbuchstabenEine E-Mail-Adresse
numbernumberZahlen oder numerische Strings aus HTML-Formularen
selectstringEin aufgelisteter Optionswert
radiostringEin aufgelisteter Optionswert
multi_selectstring[]Aufgelistete Optionswerte, Duplikate entfernt
checkboxbooleanon, true, 1, yes oder nichts
datestring, YYYY-MM-DDEin echtes Kalenderdatum
urlstring, normalisiertEine Webadresse, https:// wird ergänzt, wenn es fehlt
phonestringZiffern, Leerzeichen, + ( ) . -
ratingintegerEine ganze Zahl von 1 bis max

text

validationWerteDefault
min_length0 bis 10.000Keiner
max_length1 bis 10.000, oder höchstens 256 mit einem Pattern1.000, oder 256 mit einem Pattern
patternEin regulärer Ausdruck mit bis zu 200 Zeichen, der gegen den ganzen Wert geprüft wirdKeiner
pattern_message1 bis 200 ZeichenInvalid format

Patterns laufen mit dem Flag u und müssen auf den ganzen Wert passen. Beim Speichern lehnt Ikiform Patterns ab, die katastrophales Backtracking verursachen könnten: Rückreferenzen, wiederholte Gruppen, die Wiederholungen oder Alternativen enthalten ((a+)+, (a|b)*), und zu viele verschachtelte Wiederholungen.

textarea

SchlüsselWerteDefault
validation.min_length0 bis 16.000Keiner
validation.max_length1 bis 16.00010.000
rows1 bis 50, ein Darstellungshinweis für RendererKeiner

email

validationWerteDefault
allowed_domains1 bis 100 Domains wie example.com, exakt abgeglichenBeliebige Domain

Adressen mit mehr als 254 Zeichen werden abgelehnt. Der Domain-Teil wird in Kleinbuchstaben gespeichert; der Teil vor @ bleibt wie gesendet.

number

validationWerteDefault
minBeliebige ZahlKeiner
maxBeliebige Zahl, mindestens minKeiner
integertrue, um Dezimalzahlen abzulehnenfalse

select, radio und multi_select

SchlüsselWerteDefault
options1 bis 500 { "value", "label" }-Objekte mit eindeutigen Werten, jeweils 1 bis 200 ZeichenPflicht
validation.min_itemsNur multi_select, 0 bis 5000, oder 1, wenn Pflichtfeld
validation.max_itemsNur multi_select, 1 bis 500Die Anzahl der Optionen

Nur aufgelistete Werte werden akzeptiert. select und radio nehmen einen Wert; sende multi_select als wiederholte Namen, name[] oder als JSON-Array.

checkbox

Keine zusätzlichen Schlüssel. Eine fehlende Checkbox ist false. required: true bedeutet, dass sie angehakt sein muss, was zu Einwilligungs-Checkboxen passt. Andere Werte als on, true, 1, yes, off, false, 0, no oder leer werden abgelehnt.

date

validationWerteDefault
minEin YYYY-MM-DD-DatumKeiner
maxEin YYYY-MM-DD-Datum, gleich oder nach minKeiner

url

validationWerteDefault
https_onlytrue, um http: abzulehnenfalse
max_length1 bis 4.0962.048

Akzeptiert werden nur http:- und https:-URLs mit einem Hostnamen, der einen Punkt enthält, und ohne Benutzername oder Passwort. Gespeichert wird die normalisierte URL.

phone

validationWerteDefault
e164true, um das internationale Format zu verlangen, ohne Trennzeichen gespeichertfalse

Ohne e164 braucht eine Telefonnummer 6 bis 15 Ziffern und wird wie gesendet gespeichert. Damit wird +1 (415) 555-0123 als +14155550123 gespeichert.

rating

validationWerteDefault
max2 bis 105

Typumwandlung

HTML-Formulare senden alles als Text. Ikiform wandelt es vor dem Speichern in den Typ um, den jedes Feld deklariert. Mit name als Text, email, guests als Zahl, newsletter als Checkbox, site als URL und phone als Telefonfeld:

Gesendet, urlencoded
name=++Ada+Lovelace++&email=Ada@Example.COM&guests=3&newsletter=on&site=example.com&phone=%2B1%20415%20555%200123
Gespeichert, mit phone auf e164
{
  "name": "Ada Lovelace",
  "email": "Ada@example.com",
  "guests": 3,
  "newsletter": true,
  "site": "https://example.com/",
  "phone": "+14155550123"
}
  • Werte werden getrimmt. Ein leerer String gilt als fehlend.
  • Ein Feld, das einen Wert erwartet, lehnt ein Array mit mehr als einem Element ab.
  • Zahlen akzeptieren einfache Dezimal- und Exponentialschreibweise mit bis zu 64 Zeichen, etwa 3, -2.5 oder 1e3.

Validierungsfehler

Eine Einsendung, die die Validierung nicht besteht, wird mit 422 validation_failed abgelehnt, und nichts wird gespeichert. error.fields ordnet jeder Feld-ID ihre Meldungen zu. Bei Posts aus dem Browser erscheinen dieselben Meldungen auf einer gehosteten Fehlerseite, beschriftet mit deinen Feld-Labels.

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"
}

Unbekannte Felder

Wenn Felder definiert sind, wird jedes Feld, das nicht in der Definition steht, als Unknown field "name" abgelehnt. Reservierte Felder, die mit _ beginnen, der Honeypot und cf-turnstile-response zählen nicht. Ohne Definition werden beliebige Feldnamen akzeptiert.

Meldungen

ProblemMeldung
Fehlender PflichtwertThis field is required
Pflicht-Checkbox nicht angehaktThis box must be checked
Zu kurz oder zu langMust be at least 10 characters, Must be at most 120 characters
Pattern passt nichtDeine pattern_message oder Invalid format
E-MailEnter a valid email address, Email must be at one of: example.com
ZahlEnter a number, Enter a whole number, Must be at least 1
OptionenChoose one of the listed options, Choose at least 2 options, Choose at most 3 options
DatumEnter a valid date (YYYY-MM-DD), Must be on or after 2026-01-01
URLEnter a valid URL, Enter a valid https:// URL
TelefonEnter a valid phone number, Use international format, e.g. +14155550123
BewertungChoose a rating, Rating must be at most 5

Im Browser validieren

validate im SDK spiegelt die Server-Regeln und -Meldungen für alle 12 Feldtypen, sodass du Fehler schon vor dem Absenden anzeigen kannst. Der Server bleibt die maßgebliche Instanz. Siehe validate.