> For the complete documentation index, see [llms.txt](https://docs.fortifiedid.se/forms/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fortifiedid.se/forms/the-service/key-components/control/basic-controls/input/properties.md).

# Properties

{% tabs %}
{% tab title="Properties" %}

<table><thead><tr><th>Name</th><th>Description</th><th>Default</th><th data-type="checkbox">Mandatory</th></tr></thead><tbody><tr><td>type</td><td>Control implementation </td><td>N/A</td><td>true</td></tr><tr><td>id</td><td>Unique ID within the flow</td><td>N/A</td><td>true</td></tr><tr><td>config.required</td><td>Must have a value when leaving the step. true/false</td><td>false</td><td>false</td></tr><tr><td>config.readonly</td><td>Open to edit by enduser. true/false</td><td>false</td><td>false</td></tr><tr><td>config.always_include</td><td>Should data be sent to pipe regardless if it is changed or not</td><td>false</td><td>false</td></tr><tr><td>config.format</td><td>Frontend format validation. See more below</td><td>N/A</td><td>false</td></tr><tr><td>config.pattern</td><td>Custom format pattern. Use for custom pattern. Otherwise leave.</td><td>N/A</td><td>false</td></tr></tbody></table>

{% endtab %}

{% tab title="Example" %}

<pre class="language-json"><code class="lang-json"><strong>{
</strong>    "id": "fullName",
    "type": "Input",
    "data": "${flow.givenName} ${flow.sn}",
    "config": {
        "required": true,
        "readonly": false,
        "always_include": true,
        "pattern": "^[A-Za-z ]{2,50}$"
    }
}
</code></pre>

{% endtab %}
{% endtabs %}

### Frontend format validation.

By setting `config.format,` it guides the user entering value following a defined ruleset. A predefined set is available:

* *date*: full-date according to [RFC3339](http://tools.ietf.org/html/rfc3339#section-5.6).
* *time*: time (time-zone is mandatory).
* *date-time*: date-time (time-zone is mandatory).
* *iso-time*: time with optional time-zone.
* *iso-date-time*: date-time with optional time-zone.
* *duration*: duration from [RFC3339](https://tools.ietf.org/html/rfc3339#appendix-A)
* *uri*: full URI.
* *uri-reference*: URI reference, including full and relative URIs.
* *uri-template*: URI template according to [RFC6570](https://tools.ietf.org/html/rfc6570)
* *email*: email address.
* *hostname*: host name according to [RFC1034](http://tools.ietf.org/html/rfc1034#section-3.5).
* *ipv4*: IP address v4.
* *ipv6*: IP address v6.
* *uuid*: Universally Unique IDentifier according to [RFC4122](http://tools.ietf.org/html/rfc4122).
* *float*: float according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)
* *double*: double according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)
* *password*: password string according to the [openApi 3.0.0 specification](https://spec.openapis.org/oas/v3.0.0#data-types)
* postal:  /^\[A-Za-z0-9 -]{3,10}$/,
* phone:  /^\[+]?\[(]?\[0-9]{1,4}\[)]?(\[-s./0-9]*)$/,*
* *strict: /^\[^";\`<>\\()*\[]{}%|!^]+$/u,

Setting a custom regex is done using `config.pattern` to regex

Example:

`"pattern":"^[A-Za-z -]{3,30}$"`

* Start (^) and end ($) exactly with
* Only contain uppercase letters (A–Z), lowercase letters (a–z), spaces, or hyphens (-)
* Have a length between 3 and 30 characters

Once set, custom error message needs to be put in for displaing a functional error message:

![](/files/PXq01jV6wlBb2rcy5Ph7)

In this case "phone.error.format".

&#x20;
