Introduction
Validation for input values.
Capabilities and Frameworks
Capability | Module |
---|---|
Dependence Framework |
@askbills/util collection of utility functions |
Coding Standard |
eslint identifying and reporting on patterns found in ECMAScript/JavaScript code completely pluggable, babel-eslint support parsing ECMAScript for eslint |
Testing Framework |
lab nodejs test framework uses domains instead of uncaught exception and other global manipulation |
How to test
npm test | yarn test
npm test:coverage | yarn test:coverage
How to check lint
npm run lint
npm run lintFix
How to use
Install this module
npm install @askbills/validator --save
Checking rules for input data
const { Rules } = require('@askbills/validator');
const inputValue = 'test';
// Using built-in rule in collection Rules
const rule = new Rules.AlphabetRule('test', false);
const isValidate = rule.validate(inputValue);
if (isValidate) {
console.log('It is validated');
}
// Using rule with custom regex
const inputValue = 'test';
const rule = new Rules.RegexRule('ERROR', 'test', /\d{10, 12}/);
const isValidate = rule.validate(inputValue);
Implement custom rules
const { Rule } = require('@askbills/validator').Rules;
class CustomRule extends Rule {
constructor(code = 'RULE_CODE', message, isRequired) {
super(code, message, isRequired);
}
validate(value) {
// implement validation's logic
return value !== undefined;
}
}
Validation with rules
const {
Rules,
Validators
} = require('@askbills/validator');
const value = 'David Teo';
const maxLengthRule = new Rules.MaxLengthRule('test', 20);
const minLengthRule = new Rules.MinLengthRule('test', 6);
const fullNameRule = new Rules.FullNameRule('test');
const rule = new Validators.InputValidator('FullName', [minLengthRule, maxLengthRule, fullNameRule]);
const validatorErrors = rule.validate(value);
if (validatorErrors.length > 0) {
console.log('value got an error');
}
Validation form
const {
Rules,
Validators
} = require('@askbills/validator');
const fullName = 'David Teo';
const fullNameRule = new Rules.FullNameRule('test');
const fullNameValidator = new Validators.InputValidator('FullName', [fullNameRule]);
const email = 'developer@github.com';
const emailRule = new Rules.EmailRule('test', false);
const emailValidator = new Validators.InputValidator('Email', [emailRule]);
const validatorInfos = Validators.CompositeValidator.validate([
{fullName, validator: fullNameValidator},
{email, validator: emailValidator}
]);
if (Object.keys(validatorInfos).length > 0) {
console.log('input values got error');
}
Validation redux-form
1. redux-form's validation
const {
Rules,
Validators
} = require('@askbills/validator');
const email = 'developer@github.com';
const emailRule = new Rules.EmailRule('email must be provided');
const syncValidate = values => {
const errors = {};
if (!emailRule.validate(values.email)) {
errors.email = emailRule.errorMessage();
}
return errors
}
const optionalRule = new Rules.RegexRule('WARNING_MIDDLE_NAME', 'should provide middle name', /[a-zA-Z]{1,}/, false);
const warn = values => {
const warnings = {}
if !(optionalRule(values.middleName)) {
warnings.middleName =optionalRule.warningMessage();
}
return warnings
}
2. redux-form's component
export class SignUpForm extends Component {
render() {
return (
<View>
<Field name={'middleName'} />
<Field name={'email'} />
</View>
);
}
}
export default reduxForm({
form: 'SignUpForm',
validate: syncValidate,
warn: warn
})(SignUpForm);