An easy and powerful string-based validation library.
A PHP version, Pupil.php, is planned.
NOTE: Update 1.2.0 changed the return format of validation results. See changelog below.
Changed the rule string syntax to follow C-like languages more closely and to prevent headaches with further possible syntax additions. Strings, such as regex rule parameters, should now be quoted.
'condition ? thenRule : elseRule'
Changed the email validation function regex to a simpler one to improve validation performance.
The new regex string should be appropriate for around 99% of cases.
dist/pupil.min.js and include it on your page.
Install the module:
npm install pupil
And then require it in your project:
var pupil = require'pupil';
The basic syntax is this:
values are objects with matching keys. The rules are specified as
rule strings; more information on those below.
var rules =name: 'min(3) && max(8) && regex("^[a-zA-Z]+$")'country: 'min(2)';var values =name: nameInputElemvaluecountry: countryInputElemvalue;
The two objects don't have to have identical keys, but values without a matching key in rules won't be evaluated at all.
validate() method returns an object that has the following methods:
isValid // Whether the validation was successful or nothasErrors // The opposite of isValid()errors // Returns the fields that didn't pass validationfields // Returns all of the fields and their validation results
Rule strings are Pupil's primary method of specifying validation rules.
The syntax aims to mimic C-like languages. You can use logical operators (
condition ? thenRule : elseRule), nested "blocks" (
rule && (some || nested || rules)) and validation
String parameters for validation functions, such as the regex in the "regex" function, should be quoted.
Non-quoted parameters will be cast to floats (numbers with decimals).
For each validation function, there is also a matching function prepended by
other that allows you to run functions
on other values than the one the rule string is for. This can be useful for fields that have differing requirements depending on another field. For example:
state: 'otherEquals("country", "US") ? lenMin(2) : lenMin(0)'
Validation function arguments can be either strings or numerical values. Numerical arguments should not be wrapped in quotation marks or apostrophes:
The following functions are available by default:
equalsiEquals # A case-insensitive comparisonsEquals # A strict comparisonsiEqualslenMinlenMaxlenEqualsminmaxbetweenin # Compare to a list of valuesrequiredoptionalnumericalphaalphaNumericregex # Supply a custom regexintegerequalsTo # Compare to another field by its key
You can use the following syntax to add your own validation functions:
Where callable should, at the very least, accept two arguments:
allValues is an object containing every value that's being validated at the moment while
value contains the value we're validating at the moment. Further arguments can be passed by rule strings like so:
The function names are case-insensitive.