Icontem

Node Input Validator: Validate submitted input values in Node.js

Recommend this page to a friend!
  Info   View files Documentation   View files View files (31)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2018-10-10 (7 days ago) RSS 2.0 feedNot yet rated by the usersTotal: 36 All time: 507 This week: 4Up
Version License JavaScript version Categories
node-input-validator 1.0Freeware5Validation, Node.js, Forms, EcmaScript 6
Description Author

This package can validate submitted input values in Node.js.

It takes a set of rules to apply to the values of submitted inputs for validation.

A callback function is invoked to process invalid inputs passing information on the respective error messages.

The package can be extended to support custom validation rules.

Innovation Award
JavaScript Programming Innovation award nominee
September 2017
Number 2
Validation library for node.js

Node Input Validator is a validation library for node.js. You can also extend library to add custom rules.

Installation

npm install node-input-validator


Manuel Lemos
Name: Harcharan Singh <contact>
Classes: 4 packages by
Country: India India
Age: 26
All time rank: 10811 in India India
Week rank: 19 Up3 in India India Up
Innovation award
Innovation award
Nominee: 2x

Details

Validation Library

[![NPM version][npm-image]][npm-url] [![build status][travis-image]][travis-url] Coverage Status [![David deps][david-image]][david-url] [![node version][node-image]][node-url]

[travis-image]: https://api.travis-ci.org/artisangang/node-input-validator.svg?branch=master [travis-url]: https://travis-ci.org/artisangang/node-input-validator

[david-image]: https://david-dm.org/artisangang/node-input-validator.svg?style=flat-square [david-url]: https://david-dm.org/artisangang/node-input-validator

[npm-image]: https://img.shields.io/npm/v/node-input-validator.svg?style=flat-square [npm-url]: https://npmjs.org/package/node-input-validator [node-image]: https://img.shields.io/badge/node.js-%3E=_7.6-green.svg?style=flat-square [node-url]: http://nodejs.org/download/

Validation library for node.js

Node Input Validator is a validation library for node.js. You can also extend library to add custom rules.

Note: Migrating from 1.x to version 2.x, just remove first param from validator constructor, ie. empty object.

Breaking Changes in 2.x Changes in behaviour of digits and digitsBetween

Installation

npm install node-input-validator

Usage Simple Example

const v = require('node-input-validator');

let validator = new v({name:''}, {name:'required|minLength:5'});

validator.check().then(function (matched) {
	console.log(matched);
	console.log(validator.errors);
});

const v = require('node-input-validator');

app.post('login', function (req, res) {

    let validator = new v( req.body, {
        email:'required|email',
        password: 'required'
        });

    validator.check().then(function (matched) {
        if (!matched) {
            res.status(422).send(validator.errors);
        }
    });
})

With async/await

const v = require('node-input-validator');

router.post('login', async function (ctx) {

    let validator = new v( ctx.request.body, {
        email:'required|email',
        password: 'required'
        });

    let matched = await validator.check();

    if (!matched) {
        ctx.status = 422;
        ctx.body = validator.errors;
        return;
    }
    
})

Extending Placeholder in messages, :attribute will be replaced with field name, :value with field value and :arg0, :arg1 ...n with arguments passed to rule.


Validator.messages({
    even: 'The value of the field must be even number.',
    status: 'Invalid status'
});

Validator.extend('even', async function (field, value) {

    if( (parseInt(value) % 2) == 0 ){
		return true;
    } 
    
    this.validator.addError(field, 'even');
    return false;

});

Validator.extend('status', async function (field, value, args) {

    if( args.indexOf(value) >= 0 ){
		return true;
    }
    
    this.validator.addError(field, 'status');
    return false;

});

validator.rules.validateCustom = async (field, value)  => {
            
    if( value === 'yes' || value === 'on' ){
        return true;
    }
    
    this.validator.addError(field, 'custom');
    return false;

};

Extending/Overriding messages

Validator.messages({
    required: 'The :attribute field must not be empty.',
    email: 'E-mail must be a valid email address.',
    'password.required': 'Password should not be left blank'
});

Extending/Overriding messages in another language

Validator.messages({
    required: ':attribute ???? ???? ???? ???? ??????.',
}, 'pb');

Set/Modify default language

const validator = require('node-input-validator');
validator.setLang('pb');

For Koa2 Attach koa middleware

const validator = require('node-input-validator');
app.use(validator.koa());

Controller Example


let v = await ctx.validate(ctx.request.body, {
		name:'required|maxLength:50', 
		username:'required|maxLength:15',
		email:'required|email',
		password:'required'
	});


let isValid = await v.check();

if (!isValid) {
	// return validation errors
	ctx.body = v.errors;
}

Object Fileds Validation

    let v = new Validator({
            product: {id:'1',name:'',price:'', active:'yes'}
        },
        {
            'product': 'required|object',
            'product.id': 'required|integer',
            'product.name': 'required',
            'product.price': 'required|integer',
            'product.active': 'required|integer'
        });

    let matched = await v.check();

Array Fileds Validation

    let v = new Validator({
            roles: ['admin', 'manager', 'member']
        },
        {
            'roles.*': 'required|string'
        });

    let matched = await v.check();

    let v = new Validator({
            plan: [
                {price:'25',title:'OK'},
                {price:'',title:''},
                {price:'30'},
                {price:'',title:'Title'}
            ]
        },
        {
            'plan.*.price': 'required|integer',
            'plan.*.title': 'required'
        });

    let matched = await v.check();

Rules

You can check test cases for rules usage/examples.

required The field under validation cannot be left blank.

// required rule validation fails
let v = new Validator({name:''}, {name:'required'});

requiredIf:field,value The field under validation cannot be left blank, if provided seed value equals to provided value seed.

// requiredIf rule validation fails, becoz email cannot be left blank if age is 16
let v = new Validator({email:'', age:'16'}, {email:'requiredIf:age,16'});

requiredNotIf:field,value The field under validation may left blank, if provided seed value equals to provided value seed.

// requiredNotIf rule validation fails, becoz transport must be present in case age is not 16
let v = new Validator({transport:'', age:'15'}, {transport:'requiredNotIf:age,16'});

requiredWith:field requiredWith:field,field,field The field under validation may required in case provided seed present.

// requiredWith rule validation fails, becoz email must in case age present.
let v = new Validator({email:'', age:'17'}, {email:'requiredWith:age'});

requiredWithout:field requiredWithout:field,field,field The field under validation may left blank in case provided seed present.

// requiredWithout rule validation fails, becoz email is must in case phone,pan not provided.
let v = new Validator({email:'', username:''}, {email:'requiredWithout:phone,pan', username:'requiredWithout:email'});

accepted The field under validation must be yes, on, 1, or true.

after The field under validation must be date after provided seed.

let v = new Validator({joining:''}, {joining:'required|after:2018-02-10'});

alpha The field under validation must be entirely alphabetic characters.

alphaDash The field under validation may have alpha-numeric characters, as well as dashes and underscores.

alphaNumeric The field under validation only contains letters and numbers.

array The field under validation must be an array.

ascii The field under validation only contains ascii characters.

base64 The field under validation must be valid base64 encoded string.

before The field under validation must be date before provided seed.

let v = new Validator({joining:''}, {joining:'required|before:2018-02-10'});

lengthBetween:start,end The field under validation value length must be between provided values.

let v = new Validator({age:''}, {age:'required|between:17,30'});

boolean The field under validation must be 0/1, or true/false.

contains The field under validation must contains provided seeds.

let v = new Validator({bio:''}, {bio:'required|contains:profile'});

creditCard The field under validation must be valid credit card string.

dateFormat The field under validation must match the given date format.

let v = new Validator({dob:''}, {dob:'required|dateFormat:YYYY-MM-DD'});

Check https://momentjs.com/docs/ for supported formats

decimal The field under validation must be decimal.

digits:length The field under validation must be numeric and must have an exact length of value.

digitsBetween:min,max The field under validation must have a length between provided min and max values.

let v = new Validator({phone:''}, {age:'required|digitsBetween:10,13'});

domain The field under validation must a qualified domain.

let v = new Validator({domaon:'github.com'}, {domain:'required|domain'});

email The field under validation must be formatted as an e-mail address.

equals The field under validation must be equal to given value.

hash:algo The field under validation must be a valid hash as per provided seed.

 let v = new Validator({ 
        id: 'fd1baf48377a9f644f9af89abbee29f6' 
     }, 
     { 
         id: 'required|hash:md5' 
     });

Supported algorithms: md4, md5, sha1, sha256, sha384, sha512, ripemd128, ripemd160, tiger128, tiger160, tiger192, crc32, crc32b.

hexColor The field under validation must be valid hex color code.

hex The field under validation must be valid hex.

in The field under validation must exist in the given list of values.

let v = new Validator({status:''}, {status:'required|in:active,inactive,blocked'});

integer The field under validation must be an integer.

ip The field under validation must be an IP address.

iso8601 The field under validation must be valid Iso8601 date.

json The field under validation must be a valid JSON string.

latLong The field under validation must be a valid latitude-longitude coordinate.

macAddress The field under validation should be a valid Mac Address.

let v = new Validator({ id: '00:14:22:01:23:45' }, { id: 'required|macAddress' });
;

mime The file under validation must have a MIME type corresponding to one of the listed extensions.

min The field under validation must be greater than given value.

let v = new Validator({age:''}, {age:'required|min:21'});

max The field under validation must be less than given value.

let v = new Validator({age:''}, {age:'required|max:35'});

maxLength The length of field under validation should be less than given value.

let v = new Validator({username:''}, {username:'required|max:10'});

minLength The length of field under validation should be greater than given value.

let v = new Validator({username:''}, {username:'required|max:10|min:5'});

mongoId The field under validation should be a valid MongoDB ID.

let v = new Validator({id:''}, {id:'required|mongoId'});

notIn The field under validation must not exist in the given list of values.

let v = new Validator({status:''}, {status:'required|notIn:inactive,blocked'});

notContains The field under validation must not contains provided seeds.

numeric The field under validation must be numeric.

phoneNumber The field under validation must be a valid phone number.

regex The field under validation must match the given regular expression.

same The given field must match the field under validation.

let v = new Validator({password:''}, {password:'required|same:confirm_password'});

size The file field under validation must have a file size matching the given maximum value or should be between size range. Supported unit sufix: b,kb/k,mb/m,gb/g.

// in below case, image file size should be under 4kb limit
let v = new Validator({image:''}, {image:'required|size:4kb'});

// in below case, image file size should be between 1kb - 4kb
let v = new Validator({image:''}, {image:'required|size:4kb,1kb'});

let v = new Validator({video:''}, {video:'required|size:10mb'});

string The field under validation must be string.

url The field under validation must be a valid URL.

Post Rules

There is set of rules which can be used to validate constraints of whole input, rather than validity of singular fields.

Usage

const v = require('node-input-validator');

let validator = new v({name:''}, {'*': 'any:name,surname'});

validator.check().then(function (matched) {
    console.log(matched);
    console.log(validator.errors);
});

Post validator errors are returned in the * key. There is also possibility to add custom function as validator with help of addPostRule method. Function will be called in context of validator object with input as parameter.

const v = require('node-input-validator');

let v = new Validator({username: 'arnold', password: 'arnold123'}, {});

v.addPostRule(async function(input) {

    if (input.password.indexOf(input.username) >= 0) {
        this.validator.addError('password', 'custom', 'Password cannot contain username'); 
    }

});

any Any of the fields must be present in input.

all All of the fields must be present in input.

Typescript Support

Typings expermental

  Files folder image Files  
File Role Description
Files folder imagelib (3 files, 2 directories)
Files folder imagetest (14 files, 1 directory)
Accessible without login Plain text file .travis.yml Data Auxiliary data
Accessible without login Plain text file index.d.ts Data Auxiliary data
Plain text file index.js Class Class source
Accessible without login Plain text file jsconfig.json Data Auxiliary data
Accessible without login Plain text file package-lock.json Data Auxiliary data
Accessible without login Plain text file package.json Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files  /  lib  
File Role Description
Files folder imagemessages (1 file, 1 directory)
Files folder imagerules (3 files)
  Plain text file post.js Class Class source
  Plain text file rules.js Class Class source
  Plain text file validator.js Class Class source

  Files folder image Files  /  lib  /  messages  
File Role Description
Files folder imageen (1 file)
  Plain text file index.js Class Class source

  Files folder image Files  /  lib  /  messages  /  en  
File Role Description
  Plain text file messages.js Class Class source

  Files folder image Files  /  lib  /  rules  
File Role Description
  Plain text file date.js Class Class source
  Plain text file file.js Class Class source
  Plain text file mix.js Class Class source

  Files folder image Files  /  test  
File Role Description
Files folder imagefiles (2 files)
  Accessible without login Plain text file array-fileds.js Example Example script
  Accessible without login Plain text file conditions.js Example Example script
  Accessible without login Plain text file custom-messages.js Example Example script
  Plain text file custom.js Class Class source
  Accessible without login Plain text file date.js Example Example script
  Accessible without login Plain text file edge.js Example Example script
  Accessible without login Plain text file file.js Example Example script
  Accessible without login Plain text file multiple-rules.js Example Example script
  Accessible without login Plain text file numbers.js Example Example script
  Accessible without login Plain text file object-validation.js Example Example script
  Accessible without login Plain text file pattern.js Example Example script
  Plain text file post.js Class Class source
  Accessible without login Plain text file pre-init.js Aux. Auxiliary script
  Accessible without login Plain text file required-rules.js Example Example script

  Files folder image Files  /  test  /  files  
File Role Description
  Accessible without login Image file file-big.jpg Data Auxiliary data
  Accessible without login Image file file-small.png Icon Icon image

 Version Control Unique User Downloads Download Rankings  
 100%
Total:36
This week:0
All time:507
This week:4Up