The fastest JS validator library for NodeJS
MIT License
Bot releases are hidden (Show)
Published by icebob over 4 years ago
custom
function signatureThanks for @erfanium, in this version there is a new signature of custom check functions.
In this new function you should always return the value. It means you can change the value, thus you can also sanitize the input value.
Old custom function:
const v = new Validator({});
const schema = {
weight: {
type: "custom",
minWeight: 10,
check(value, schema) {
return (value < schema.minWeight)
? [{ type: "weightMin", expected: schema.minWeight, actual: value }]
: true;
}
}
};
New custom function:
const v = new Validator({
useNewCustomCheckerFunction: true, // using new version
});
const schema = {
name: { type: "string", min: 3, max: 255 },
weight: {
type: "custom",
minWeight: 10,
check(value, errors, schema) {
if (value < minWeight) errors.push({ type: "weightMin", expected: schema.minWeight, actual: value });
if (value > 100) value = 100
return value
}
}
};
Please note: the old version will be removed in the version 2.0.0!
The signature is used in custom
function of built-in rules.
const v = new Validator({
useNewCustomCheckerFunction: true // using new version
});
const schema = {
phone: { type: "string", length: 15, custom(v, errors) => {
if (!v.startWith("+")) errors.push({ type: "phoneNumber" })
return v.replace(/[^\d+]/g, ""); // Sanitize: remove all special chars except numbers
} }
};
Published by icebob over 4 years ago
Published by icebob almost 5 years ago
Published by icebob almost 5 years ago
Published by icebob almost 5 years ago
Published by icebob almost 5 years ago
The full library has been rewritten. It uses code generators in order to be much faster.
This new version contains several breaking changes.
The rule codes have been rewritten to code generator functions. Therefore if you use custom validators, you should rewrite them after upgrading.
The number
, boolean
and date
rules have a convert: true
property. In the previous version it doesn't modify the value in the checked object, just converted the value to the rules. In the version 1.0 this property converts the values in the checked object, as well.
The sanitization function is implemented. There are several rules which contains sanitizers. Please note, the sanitizers change the original checked object values.
Rule | Property | Description |
---|---|---|
boolean |
convert |
Convert the value to a boolean. |
number |
convert |
Convert the value to a number. |
date |
convert |
Convert the value to a date. |
string |
trim |
Trim the value. |
string |
trimLeft |
Left trim the value. |
string |
trimRight |
Right trim the value. |
string |
lowercase |
Lowercase the value. |
string |
uppercase |
Uppercase the value. |
string |
localeLowercase |
Lowercase the value with String.toLocaleLowerCase . |
string |
localeUppercase |
Uppercase the value with String.toLocaleUpperCase . |
string |
padStart |
Left padding the value. |
string |
padEnd |
Right padding the value. |
string |
convert |
Convert the value to a string. |
email |
normalize |
Trim & lowercase the value. |
forbidden |
remove |
Remove the forbidden field. |
object |
strict: "remove" |
Remove additional properties in the object. |
* |
default |
Use this default value if the value is null or undefined . |
Basically the validator expects that you want to validate a Javascript object. If you want others, you can define the root level schema, as well. In this case set the $$root: true
property.
Example to validate a string
variable instead of object
const schema = {
$$root: true,
type: "string",
min: 3,
max: 6
};
v.validate("John", schema); // Valid
v.validate("Al", schema); // Fail, too short.
You can use string-based shorthand validation definitions in the schema with properties.
{
password: "string|min:6",
age: "number|optional|integer|positive|min:0|max:99",
retry: ["number|integer|min:0", "boolean"] // multiple types
}
equal
ruleIt checks the value equal (==
) to a static value or another property. The strict
property uses ===
to check values.
Example with static value:
const schema = {
agreeTerms: { type: "equal", value: true, strict: true } // strict means `===`
}
v.validate({ agreeTerms: true }, schema); // Valid
v.validate({ agreeTerms: false }, schema); // Fail
Example with other field:
const schema = {
password: { type: "string", min: 6 },
confirmPassword: { type: "equal", field: "password" }
}
v.validate({ password: "123456", confirmPassword: "123456" }, schema); // Valid
v.validate({ password: "123456", confirmPassword: "pass1234" }, schema); // Fail
properties
in object ruleYou can use the properties
property besides the props
property in the object rule.
Published by icebob almost 5 years ago
Published by icebob over 5 years ago
Published by icebob over 5 years ago
Published by icebob over 5 years ago
uuid
rule by @intech. #43
Published by icebob over 5 years ago
url
rule.numeric
attribute to string
rule.alpha
, alphanum
& alphadash
attributes to string
rule.index.d.ts
file.