the_validator

universal validation through a json interface

npm install the_validator
6 downloads in the last week
6 downloads in the last month

The Validator!

Capable of leaping across language barriers, validating data in a flash, and rescuing small kittens.

By using a JSON interface, Validator can be implemented in any programming language. Validator prevents duplication of validation logic on the client and server.

Create a schema

{
    "fieldName": [
        test1, test2, ...
    ],
    "anotherField": [...]
}

tests are of the form

{ "testType:testValue": "message if test fails" }

testType

required

required must be the first test of a given fieldName. Passes if the given field name evaluates to a truthy value. If a required test is not present, then subsequent tests will only be run if the tested data contains a key for the associated fieldname.

{
    "username": [
        { "required": "you must supply a username" }
    ]
}

minimumLength

string must be of the specified minum length

{
    "password": [
        { "required": "password required" },
        { "minimumLength:6", "password must be at least six characters long" }
    ]
}

maximumLength

analogous logic to minimumLength

regex

must match the supplied regex

{"regex:/^[a-zA-Z0-9*$/": "alphanumeric characters only" }

type

can test for types number, string, boolean, object, and null.

{ "type:boolean": "must be true or false" }

comparison operators

perform the <, >, <=, >=, and == operators.

{ ">=:100": "you must be 100cm tall to ride the Ferris wheel" }

email

test if matches a proper email format

{ "email": "bad email format" }

match

tests both values of a passed array of two values match

{
    "password": [
        { "match": "passwords must match" }
    ]
}

enumerated

tests that value is a member of a set of values

{
    "letter": [
        { "enumerated:a,b,c": "value is not 'a', 'b' or 'c'" }
    ]
}

numeric

Numeric strings. accepts values such as "123", "1.2", ".5", "05", "1."

{ "numeric": "numeric string" }

integer

Integer strings. Only characters 0-9

alphabetical

Strings of only letters (upper or lower case)

alphanumeric

Strings of only letters and digits

Currently Implentations are Javascript and PHP.

PHP

$validator = new Validator(json_decode(file_get_contents('validation_schema.json'), true));

$errors = $validator->test(array(
    'username' => 'bob',
    'password' => 'cornflakes'
));

JavaScript

var validator = new Validator(schema);

var errors = validator.test({
    username: 'bob',
    password: 'cornflakes'
});
npm loves you