Validators
Validators in @grainular/nord-forms play a crucial role in ensuring that data entered in forms meets specific criteria. This section provides an overview of how to use a validator with a control and how to create your own custom validator.
Using a Validator
A validator can be attached to a control to enforce data validation rules. Here’s how you can use a predefined validator, like required, with a control:
import { createControl, required } from '@grainular/nord-forms';
// Create a control with the required validator
const nameControl = createControl<string>(
{
value: null,
},
[required]
);
console.log(nameControl.isValid);
// logs true or false depending on the valueIn this example, the required validator is used to ensure that the nameControl has a non-empty value.
Creating a custom Validator
You can create custom validators to define your own validation logic. A validator is a function that takes a value and returns either null (if the value passes the validation) or a ControlError object if the validation fails.
Type: Validator<Type extends any> = (value: Type) => null | ControlError;
Example
Here’s an example of a custom validator that checks if a string is at least a certain length:
const minLength = (min: number): Validator<string> => {
return (value: string) => {
if (value.length < min) {
return { minLength: true };
}
return null;
};
};
// Use the custom validator with a control
const passwordControl = createControl<string>(
{
value: '',
},
[minLength(8)]
);In this example, the minLength validator ensures that the passwordControl has a value with at least 8 characters.
Nørd Validators
Nørd provides a set of predefined validator functions to enforce common data validation rules. These validators can be used with form controls to ensure the integrity and correctness of user input.
required
The required validator checks if the value is not null or undefined. It's useful for ensuring that a field is filled out in forms.
Type: required<T extends any>(value: T) => { required: true } | null
const nameControl = createControl<string>(
{
value: '',
},
[required]
);minLength
The minLength validator ensures that an array has at least a specified minimum number of elements.
Type: minLength<T extends any[]>(amount: number)(controls: T) => { minLength: true } | null
const tagsControl = createControl<string[]>(
{
value: [],
},
[minLength(3)]
);maxLength
The maxLength validator checks that an array does not exceed a specified maximum number of elements.
Type: maxLength<T extends any[]>(amount: number)(controls: T) => { maxLength: true } | null
const tagsControl = createControl<string[]>(
{
value: [],
},
[maxLength(5)]
);textLength
The textLength validator is used for strings to ensure their length falls within a specified range, defined by minimum and maximum values.
Type: textLength(min?: number, max?: number)(value: string) => { textLength: true } | null
const bioControl = createControl<string>(
{
value: 'Bio text here...',
},
[textLength({ min: 10, max: 200 })]
);isEmail
The isEmail validator checks if a string is a valid email address using a regular expression.
Type: isEmail(value: string) => { email: true } | null
const emailControl = createControl<string>(
{
value: 'user@example.com',
},
[isEmail]
);
Nørd