Low-level rule manager for validating values.

Usage no npm install needed!

<script type="module">
  import valueValidator from '';


Build Status


Low-level rule manager for validating values.


$ npm install value-validator --save


const Validator = require('value-validator')
const validator = new Validator([
  function (v) {
    return checkExistsPromise(v)

.then((result) => {
  result // whether passes the validation
.catch((err) => {
  err    // if any error throws or returns

// Examples
validator.validate('foo').then(pass => {
  pass // false, to short

validator.validate('').then(pass => {
  pass // false, only letters, numbers and underscores.

validator.validate('steve').catch(err => {
  err  // maybe `new Error('username "steve" already exists.')`

new Validator(rule, options)

  • rule RegExp|function()|String|Array.<mixed> rule could be
    • regular expression,
    • function either returns a Promise or normal value
    • string (validator preset),
    • or an array of mixed-type of the former three.

.validate(value [, callback])

  • value any value to be validated
  • callback function(err, pass)= using callback is deprecated since 2.2.0, and the parameter will be removed in the next major version.

returns a Promise if no callback, or undefined


  • context Object specify this object for all validator functions.

Returns this

Sync Function-type rule

The function should accept only one argument, which is the value to be validated.

If the function returns a Boolean, it indicates whether the validation is passed, and the err will be null

const validator = new Validator(v => v > 10)
validator.validate(5).then(pass => {
  pass // false

If the function returns an Error, it means the validation fails, and the error will passed to the callback function of validate(v, callback) as the first parameter err.

const validator = new Validator(v => {
  if (v > 10) {
    return true

  return new Error('should larger than 10')
validator.validate(5).catch(err => {
  err // new Error('should larger than 10')

Async validator

To define an asynchronous validator, just returns a Promise.

Validator.defaults({preset=, codec=})

Pre-defines certain option of Validator and returns a constructor.

Validator presets are an abbreviation of a certain validation, or a set of validations.

const presets = {

  // To define a function-typed preset
  unique: function (v) {
    return new Promise((resolve, reject) => {
      asyncCheckExists(v, exists => {
        if (exists) {
          return reject(new Error(`username "${v}" already exists.`))


  min4: /.{4,}/,

  // A preset could be a set of presets.
  username: [

const MyValidator = Validator.defaults({presets})

// Then we could use `username` as the test rule.
const validator = new MyValidator('username')