-
Notifications
You must be signed in to change notification settings - Fork 1
FormValidator
Validate any form model. To use it, construct a new FormValidator
.
const formValidator = new FormValidator<MyInterface>(obj)
.addValidation(["firstname"], "required")
.addValidation(["birthdate"], "isDate")
.addValidation(["password"], "strongPassword")
.validate();
and then you can use the output error object with any library framework you like. And then use formValidator.getErrors()
to retreive the errors.
This utility consists of the following methods:
Add validation criteria
formValidator.addValidation(["firstname"], "required");
Param | Type | Description |
---|---|---|
fields | Array<keyof T> |
The fields that the criteria will be added to. It's of type keyof of the interface passed |
type | ValidationType |
The type of validation to be executed. Note that this affects the required properties passed in the next parameter specs
|
specs? | ValidationSpecs |
The specifications of the criteria |
The type of validation to be executed against the specified fields. You can find the list of supported validation types defined in the list below.
Validation type | Description |
---|---|
"required" |
Mandatory field |
"isDate" |
Field should be a date object |
"validEmail" |
The field is a valid email address |
"strongPassword" |
The field is a strong password |
"isPhoneNumber" |
The field is a valid phone number |
"dateRange" |
The field is a date object that matches a date range IMPORTANT: Must pass either or both of minDate or maxDate in the specs
|
"valueRange" |
The field is a number matches a value range IMPORTANT: Must pass either or both of minValue or maxValue in the specs
|
"textLength" |
The field is a string with a length that matches a length IMPORTANT: Must pass either or both of minLength or maxLength in the specs
|
Validation specifications are required by some validation types. For example, to validate a string value is less than n characters long the validator needs to know the value of n. You can find the list of supported validation specs defined in the list below. However, when defining a custom validation you might want to add a new validation spec. You can read more about adding a custom validation.
Validation spec | type | Description |
---|---|---|
minLength | number | Minimum string length |
maxLength | number | Maximum string length |
minValue | number | Minimum number value |
maxValue | number | Maximum number value |
minDate | Date | Minimum date |
maxDate | Date | Maximum date |
Add custom validation criteria
/** Validating if `amount2` is bigger than `amount1` */
const validator = new FormValidator<ObjInterface>(obj).addCustomValidation(
["amount1", "amount2"],
["amount2"],
() => {
if (amount2 > amount1) {
return {
errorCode: "moreThanMaxValue", // One of many predefined error types
specs: { maxValue: obj.amount1 }
};
} else {
return null;
}
}
);
Param | Type | Description |
---|---|---|
errorFields | Array<keyof T> |
The field(s) where the error will be displayed in |
validator | () => ModelFieldError |
The custom validation method that returns an error object of type ModelFieldError
|
Validation Error | Description |
---|---|
"empty" |
The field is empty |
"invalidDate" |
The value is not a valid date object |
"invalidEmail" |
The value is not a valid email address |
"weakPassword" |
The value is a weak password |
"beforeMinDate" |
The date occured before the minimum date specified in the specs (minDate ) |
"afterMaxDate" |
The date occured after the maximum date specified in the specs (maxDate ) |
"lessThanMinLength" |
The length of the string value is less than the minimum length specified in the specs (minLength ) |
"moreThanMaxLength" |
The length of the string value exceeds the maximum length specified in the specs (maxLength ) |
"lessThanMinValue" |
The numeric value is less than the minimum value specified in the specs (minValue ) |
"moreThanMaxValue" |
The numeric value exceeds the minimum value specified in the specs (maxValue ) |
"invalidInput" |
The value is invalid. This is a general error especially triggered when running type-specific validations such as string minimum length. |
"invalidPhoneNumber" |
The value is an invalid phone number |
When defining a custom validator you might want to create a new validation error or spec so it can be identified when reteiving the errors detected. To do so, just pass the custom error type when declaring a custom validation. See the example below:
type ExtraValidationSpecs = { dependencyValue: number };
type ExtraValidationErrors = "moreThanDependencyValue";
validator.addCustomValidation(
["dateB"],
(): ModelFieldError<ExtraValidationErrors, ExtraValidationSpecs> => {
if (model.withdrawAmount > model.balance) {
return { errorCode: "moreThanDependencyValue", specs: { dependencyValue: model.balance } };
} else {
return null;
}
}
);
When you retreive the error from the validator you can enable intellisense when you define the returned value like this:
const errors: ModelFieldError<ExtraValidationErrors, ExtraValidationSpecs> = validator.getErrors();