# Validation

{% hint style="success" %}
This is the official documentation of the `@forestadmin/agent` Node.js agent.
{% endhint %}

![A field failing validation](https://3861847666-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9UN5oBJhgzLadOqi7jx6%2Fuploads%2Fgit-blob-8668bc8ffc7b3c737c80351447aa58c6eed2f303%2Ffield-validation-error.png?alt=media)

Most data sources can import validation rules from their target.\
For instance, if you are using the [SQL data source](https://docs.forestadmin.com/developer-guide-agents-nodejs/data-sources/provided-data-sources/sql).

* Columns of type `VARCHAR(15)` will automatically carry a `less than 15 chars` validator.
* Non-nullable columns will automatically carry a `Present` validator.

However, you may want to enforce stricter restrictions than the ones which are implemented in your data source.

### Adding validation rules

The list of operators (`Present`, `LongerThan`, ...) which can be used when adding validators is the same as the [filter operators](https://docs.forestadmin.com/developer-guide-agents-nodejs/data-sources/getting-started/queries/filters#operators).

```javascript
collection
  .addFieldValidation('firstName', 'Present')
  .addFieldValidation('firstName', 'LongerThan', 2)
  .addFieldValidation('firstName', 'ShorterThan', 13)
  .addFieldValidation('firstName', 'Match', /^[a-z]+$/i);
```

### Custom validators

If you need to implement custom validators or validation over multiple fields you may use [change hooks](https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/hooks).

### Make Field Optional

If the introspection marks a field as required, and you would like to make it optional, you can use the `setFieldNullable` function on your collection.

{% hint style="danger" %}
Be wary that if your database system does not allow empty value on the specified field, updating that field on records with an empty value will result in an error.
{% endhint %}

```javascript
collection.setFieldNullable('firstName');
```
