
# Input Rules

Input Rules let you set extra requirements for what someone can enter in a field. They run when the form is submitted, on top of the field's built-in checks (the **Required** toggle and any type-specific checks like email format).

Find the **Input Rules** option in any field's settings panel in the form builder.

## Writing a Rule

Type one or more rules into the **Input Rules** field, separated by pipes (`|`):

```
min:3|max:50
```

```
alpha_num|max:20
```

```
regex:/^[A-Z]{2}-\d{4}$/
```

If a rule isn't valid, the form builder will reject it when you save the field.

## Length

Constrain the length of text or the size of a number.

| Rule | Description |
|------|-------------|
| `min:3` | At least 3 characters (or numeric value ≥ 3) |
| `max:255` | At most 255 characters (or numeric value ≤ 255) |
| `size:5` | Exactly 5 characters |
| `between:5,20` | Between 5 and 20 characters |

## Numbers

Use these on **Number** fields, or on text fields where the value should look like a number.

| Rule | Description |
|------|-------------|
| `numeric` | Must be a number |
| `integer` | Must be a whole number (no decimals) |
| `decimal:2` | Must have exactly 2 decimal places |
| `gt:0` | Greater than 0 |
| `gte:1` | Greater than or equal to 1 |
| `lt:1000` | Less than 1000 |
| `lte:100` | Less than or equal to 100 |

## Letters & Patterns

Constrain which characters are allowed in a text value.

| Rule | Description |
|------|-------------|
| `alpha` | Letters only |
| `alpha_num` | Letters and numbers |
| `alpha_dash` | Letters, numbers, dashes, and underscores |
| `lowercase` | Must be lowercase |
| `uppercase` | Must be uppercase |
| `starts_with:DR-` | Must start with the given text |
| `ends_with:.pdf` | Must end with the given text |
| `regex:/^[A-Z]{2}\d{4}$/` | Must match the given regular expression |

## Format

Built-in checks for common formats.

| Rule | Description |
|------|-------------|
| `email` | A valid email address |
| `url` | A valid URL |
| `ip` | A valid IP address |
| `uuid` | A valid UUID |

## Choice

Restrict input to a fixed set of values.

| Rule | Description |
|------|-------------|
| `in:foo,bar,baz` | Must be one of the listed values |
| `not_in:test,example` | Must not be one of the listed values |

## Date

Use these on **Date** fields. Reference dates can be `today`, `tomorrow`, `yesterday`, or any date in `YYYY-MM-DD` format.

| Rule | Description |
|------|-------------|
| `date` | A valid date |
| `after:today` | After the given date |
| `after_or_equal:2026-01-01` | On or after the given date |
| `before:2030-01-01` | Before the given date |
| `before_or_equal:2026-12-31` | On or before the given date |

## Yes / No

Use these on toggle / yes-no inputs.

| Rule | Description |
|------|-------------|
| `boolean` | Must be a true/false value |
| `accepted` | Must be `yes`, `on`, `1`, or `true` — handy for "I agree" style fields |
| `declined` | Must be `no`, `off`, `0`, or `false` |

## Tips

- [Input Masks](/docs/forms/input-masks) shape the value as it is typed; pair a mask with a `regex:` rule when you need to *enforce* the format on submit.
- Combine multiple rules with `|` to apply them all (e.g. `alpha_dash|min:4|max:20`).

## Related

- [Input Masks](/docs/forms/input-masks) — auto-format values as the user types
- [Form Validation](/docs/forms/validation) — overview of all validation options
- [Field Types](/docs/forms/field-types) — built-in validation per field type
