# Operators Reference

Canonical: https://useformwork.com/docs/logic/operators

Every condition operator and the value types on which it is available.

Operators are shared by field/page display logic, field validation, workflow conditions, and reference filters. The builder filters the list using the left-hand value's type.

## Quick chooser

| Need | Use |
|------|-----|
| Exact scalar match | Equals / Does not equal |
| Numeric or chronological ordering | Greater/Less comparisons |
| Character, selection, or instance count | Length operators |
| Text or array membership | Contains / Does not contain |
| Text prefix, suffix, or regex | Starts with / Ends with / Matches pattern |
| Validate text format | Is email, URL, number, integer, float, alpha, alphanumeric |
| Test a toggle | Is true / Is false |
| Check presence | Is empty / Is not empty |

## Complete operator table

| Builder label | Key | Value needed | Available types |
|---------------|-----|:------------:|-----------------|
| Equals | `eq` | Yes | String, number, boolean, date, datetime, time |
| Does not equal | `neq` | Yes | String, number, boolean, date, datetime, time |
| Greater than | `gt` | Yes | Number, date, datetime, time |
| Greater or equal to | `gte` | Yes | Number, date, datetime, time |
| Less than | `lt` | Yes | Number, date, datetime, time |
| Less or equal to | `lte` | Yes | Number, date, datetime, time |
| Length equals | `length_eq` | Yes | String, array |
| Length not equals | `length_neq` | Yes | String, array |
| Length greater than | `length_gt` | Yes | String, array |
| Length greater or equal to | `length_gte` | Yes | String, array |
| Length less than | `length_lt` | Yes | String, array |
| Length less or equal to | `length_lte` | Yes | String, array |
| Contains | `contains` | Yes | String, array |
| Does not contain | `not_contains` | Yes | String, array |
| Starts with | `starts_with` | Yes | String |
| Ends with | `ends_with` | Yes | String |
| Matches pattern | `matches_pattern` | Yes | String |
| Is email | `is_email` | No | String |
| Is URL | `is_url` | No | String |
| Is number | `is_number` | No | String |
| Is integer | `is_integer` | No | String |
| Is float | `is_float` | No | String |
| Is alpha | `is_alpha` | No | String |
| Is alphanumeric | `is_alphanum` | No | String |
| Is true | `is_true` | No | Boolean |
| Is false | `is_false` | No | Boolean |
| Is empty | `is_empty` | No | String, number, boolean, date, datetime, time, array |
| Is not empty | `is_not_empty` | No | String, number, boolean, date, datetime, time, array |

## Repeatable parents

When the selected reference represents a repeatable parent rather than one child instance, the builder deliberately limits operators to:

`length_eq`, `length_neq`, `length_gt`, `length_gte`, `length_lt`, `length_lte`, `is_empty`, and `is_not_empty`.

Choose a child/instance reference when you need to compare the values inside it.

## Meaning by type

- String **length** counts characters; array **length** counts items or repeatable instances.
- String **contains** checks text content; array **contains** checks membership.
- Date/time comparisons use chronological order.
- Empty checks are the clearest way to test absence; do not approximate emptiness with Equals and a guessed blank value.
- Is number/integer/float validate text that represents those formats; a true Number field already has numeric type.

When design-time type is unknown, such as some dynamic workflow output, the editor may show the full set. Runtime data must still be compatible.

## Right-hand values

Operators marked **Value needed** accept a typed literal or compatible reference. Operators without one are complete predicates by themselves.

For practical configuration, return to [Conditional Logic](/docs/logic/conditional-logic) or [Validation Rules](/docs/logic/validation-rules).