> For the complete documentation index, see [llms.txt](https://web-dev-guide.wishtack.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://web-dev-guide.wishtack.io/forms/form-validation.md).

# Form validation

## Type

The `type` attribute of the `<input>` elements describes the behavior and validation constraints of the input.

<http://www.w3schools.com/html/html_form_input_types.asp>

{% embed url="<http://www.w3schools.com/html/html_form_input_types.asp>" %}

{% hint style="info" %}
On some devices, the virtual keyboard will be adapted to the type of the input.
{% endhint %}

## Validation

By default, a form **can not be submitted until all inputs are valid**.

It is possible to use additional attributes like `maxlength`, `minlength`, `pattern` or `required` to **apply some additional constraints**.

The `validity` property of the `<input>` element can be used in JavaScript to check input's validity and eventually, the invalidity reason.

```javascript
const input = document.querySelector('input');

input.validity.valid; // false
input.validity.valueMissing; // true
```

{% hint style="info" %}
It is possible to disable native validation using the form's `novalidate` attribute.

This can be used to validate the form manually or using a JavaScript library or framework.
{% endhint %}
