validify.js
validify.js is a JavaScript library for data validation.
Features:
- Supports Node.js, require.js or standalone use in the browser
- Validators can be invoked using the dynamic methods generated by the framework
- Validation can be performed by specifying the object/value to validate and a constraints JSON object
NOTE: this library is not yet stable and is likely to change and be refactored rapidly
Install
Node.js
npm install validify.js
Bower
bower install
Usage
Node.js
var validify = require('validify');
validify.email('test@example.com') // returns trueBrowser (standalone)
<script src="validify.standalone.min.js"></script>
<script>
validify.email('test@example.com') // returns true
</script>Browser (require.js)
<script src="require.js"></script>
<script>
require(['validify.standalone.min'], function(validify) {
validify.email('test@example.com') // returns true
})
</script>Constraints
Format
[
{
<attribute>: {
<validator>: <options>
}
},
...
]attribute - name of the object attribute to validate, or "" for simple value *validator** - the name of the validator to use options - the options to use for the enclosing validator
Invoking
var validify = require('validify');
// validate(<object>, <constraint(s)>, mode)
// mode is irrelevant when single constraint passed in
validify.validate(testObject, {
firstName: { present: true }
});
// mode 'any' - firstName or nickName must be present
validify.validate(testObject, [
{ firstName: { present: true } },
{ nickName: { present: true } }
], 'any');Modes:
- all (and) - every one of the listed constraints must be true
- any (or) - at least one of the listed constraints must be true
- one (xor) - only one of the listed constraints can be true
Example 1
Simple validation of a single field.
Object:
id (integer)
firstName (string)
lastName (string)
Logic:
firstName length > 3
Rule:
{
firstName: {
greaterThan: { min: 3 }
}
}Example 2
Multiple fields can be validated for a single object.
Object:
id (integer)
firstName (string)
lastName (string)
Logic:
id must be present firstName present && (0 <= length < 10)
Rule:
[
{
id: {
present: true
}
},
{
firstName: {
present: true,
length: { min: 0, max: 10, inclusive: false}
}
}
]Example 3
Simple logic can be performed through use of validation operators.
Object:
id (integer)
integer (integer)
float (float)
isFloat (boolean)
Logic:
if isFloat == true then float must be present && integer must be missing else float must be missing && integer must be present fi
Rule:
[
{
isFloat: {
eq: true
},
integer: {
present: false
},
float: {
present: true
}
},
{
isFloat: {
eq: false
},
integer: {
present: true
},
float: {
present: false
}
}
]Example 4
Unwrap arrays to apply validation to each object in turn
Object:
id (integer)
name (string)
list ([{
name:
field1: true
}, {
field1: false
}])
Logic:
list.field1 == true
Rule:
[
{
"list.field1": {
eq: true
}
}
]Acknowledgements
This library was partially inspired by several other frameworks and validation libraries, which are fantastic in their own right, but did not quite meet my needs.
If you are looking for something more battle tested or widely adopted, then check them out.
License
The MIT License (MIT), Copyright (c) 2014-2014 David Castro arimus@gmail.com
See LICENSE file for details