Skip to main content

Validation

Validation rules let you reject submissions until the visitor enters acceptable values. Rules show inline errors under the field as the visitor types or moves on, and the Submit button stays disabled until everything passes.

There are two places validation rules come from:

  1. The Properties tab's type-specific options — built-in rules attached to the field's options (e.g. Number Min/Max, Text Min/Max Length, Email format, Password strength).
  2. The Validation tab — additional rules you add per field (e.g. a custom regex pattern with a custom error message).

Both layers are checked. If either layer flags an error, the field is invalid.

Built-In Format Validation

These rules are always active for the corresponding field type — you don't add them, they're inherent.

Field TypeBuilt-In Rule
emailMust match something@something.tld
phoneMust be a valid phone number per libphonenumber-js for the chosen country
url / websiteMust parse as a URL with http:// or https:// protocol
numberMust be numeric
date / time / datetimeNative browser date/time validity

The Required Toggle

Every field has a Required toggle in the Properties tab. When on, the field must have a non-empty value before submission.

For toggles and consent fields specifically, "non-empty" means 'true' (checked). An unchecked required consent blocks submission.

The Validation Tab

Click any field, then click the Validation tab. Click + Add to add a rule.

Each rule has three parts:

FieldWhat It Does
TypeThe kind of rule (Min Length, Max Length, Regex Pattern, Email Format, URL Format)
ValueThe constraint (e.g. 3, ^[A-Z][a-z]+$, blank for format checks)
Error message (optional)Custom message shown when the rule fails. If blank, a generic default is used.

Add as many rules as you need. They're all checked — if any fails, the field is invalid.

Available Rule Types

TypeValueWhat It Checks
Min LengthNumberCharacter count is at least this
Max LengthNumberCharacter count is at most this
Regex PatternRegular expression stringValue matches the regex
Email Format(none)Value matches a basic email pattern
URL Format(none)Value parses as a URL

Password-Specific Rules

The password field's strength rules (Require uppercase / lowercase / number / special) are configured in the Properties tab, not the Validation tab. They're internally translated into validation rules of types require_uppercase, require_lowercase, require_number, require_special.

How Errors Show

Errors appear inline only after the visitor has touched the field (focused and blurred) OR after they've attempted to submit. This avoids a wall of red the moment the form opens.

Visitor ActionWhat Shows
Form just loadedNo errors visible
Visitor types in a field, then tabs outThat field's error renders
Visitor clicks Submit while form has errorsEvery invalid field highlights, plus the field-level error renders
Submit buttonStays disabled the whole time the form is invalid

Inline error messages are red and appear directly below the input.

Worked Example: Custom Regex Pattern

Goal: a Text Input that accepts only a name in Title Case (one capital letter followed by lowercase only, no spaces or digits).

Steps:

  1. Drop a Text Input on the canvas.
  2. In Properties, set Label to Name, mark Required.
  3. Click the Validation tab.
  4. Click + Add. Pick Regex Pattern from the dropdown.
  5. Value: ^[A-Z][a-z]+$
  6. Error message: Please enter a Title Case name (e.g. Alice).
  7. Save.

Now alice is rejected with the custom error, Alice passes.

Default values must satisfy validation

If you set a defaultValue on a field that violates one of its validation rules, the form will load already-invalid and the visitor has to fix it before submitting. Make sure your defaults pass.

Form-Level Submit Block

The form-level Submit button is disabled while ANY input field has an error. Hovering shows the tooltip "Please fill out all required fields before submitting". There's no way to bypass — visitors must clear every error before the form can POST.

In conversational forms, the Continue button on the current screen is disabled with the same logic, but only blocks based on the current screen's fields. Other screens' validity is checked at the final step before the actual POST.


Next Steps