web-form-validator
Version:
A JavaScript Form data validation library.
126 lines (107 loc) • 3.04 kB
Markdown
or `yarn add web-form-validator`
Download react app example, install dependencies, start app;
Create a validation schema for your form. The object keys match input fields names.
List validation rules as array of strings or objects;
Available global rules: `required`, `email`, `phone`, `url`, `integer`, `lessThan`, `greaterThan`, `isEqual`, `minLength`, `maxLength`.
To customize error message in global rules add `error` in object that mentions a rule;
```javascript
name: [{
rule: 'required',
error: 'Enter your name',
}],
```
To customize a validation callback in global rules or add your own validation rule add `isValid` callback in object that mentions a rule;
The callback should return `true` if the field is valid or error message if the field is not valid
```javascript
'phone.home': [{
rule: 'require',
isValid: (input, err, opt, formData) => {
const workNumber = getDeepValue(formData, 'phone.work') || '';
const homeNumber = input || '';
return (workNumber.trim().length || homeNumber.trim().length) ? true : 'Enter home or work number';
},
}]
```
```javascript
valid: [{
isValid: input => (
input === 'valid' ? true : 'The custom field is not valid'
),
}]
```
User `option` in rules which require that (`lessThan`, `greaterThan`, `isEqual`, `minLength`, `maxLength`);
The library uses option as a fields name (if exists) otherwise as a value;
e.g. the library will try find a formData.password to compare with formData.confirmPassword
```javascript
confirmPassword: [{
rule: 'isEqual',
error: 'Passoword confirmation should match the password',
option: 'password',
}],
```
**schema.js**
```javascript
export default {
username: ['required'],
name: [{
rule: 'required',
error: 'Enter your name',
}],
email: ['required', 'email'],
valid: [{
isValid: input => (
input === 'valid' ? true : 'The custom field is not valid'
),
}],
confirmPassword: [{
rule: 'isEqual',
error: 'Passoword confirmation should match the password',
option: 'password',
}],
message: [{
rule: 'maxLength',
option: 50,
}],
'address.zip': [
'integer',
'required',
{
rule: 'minLength',
option: 5,
},
],
};
```
**App.js**
```javascript
........
import validate from 'web-form-validator';
........
import schema from './schema';
........
state = {
formData: {
name: '',
username: '',
email: '',
valid: '',
password: '',
confirmPassword: '',
message: '',
address: {
........
zip: '',
},
},
errors: {},
isValid: true,
}
........
onSubmitHandler = (e) => {
e.preventDefault();
const { errors, isValid } = validate(schema, this.state.formData);
.......
```
validate callback returns array of objects (errors where key is input field name, value is an error) and boolean `isValid`
`npm install web-form-validator --save`