validate.validator
import validate.validator
validatelifts part of this module out to its own top level; each name below is shown with the path that reaches it. Anything still spelledvalidate.validator.*needsimport validate.validator.
validate.validator
Provides the Validator fluent builder. Each method appends one rule
class (and its constructor arguments) to an internal chain. The chain is
later resolved by Schema: it instantiates each rule with the field
name injected, then calls validate(value) in order.
Rules stop executing for a field the moment one fails, unless
bail(false) has been explicitly disabled. When sometimes() is set
and the field is absent or nil, the entire rule chain is skipped.
Classes
Validator
class validate.Validator
Fluent rule chain builder for a single field.
Every method returns self so calls can be chained:
validate.string().email().max_length(254).required()
The order of chained rules is the order in which they are evaluated. Put
required() first so that a missing value is caught before
type-specific rules run against a nil.
Custom rules
Provide an inline anonymous function via custom():
validate.string().custom(@(value) {
return value.starts_with('zuri-')
}, 'Must start with "zuri-".')
Or subclass Rule and add it via use():
import validate { Rule, Validator }
class Palindrome < Rule {
validate(value) {
if !is_string(value) return false
var s = value.lower()
return s == s.reverse()
}
error() { return '${self.name} must be a palindrome.' }
}
var v = Validator().string().use(Palindrome)
Validator.label()
validate.Validator.label(label) -> Validator
Sets a human-readable label for this field. When set, error messages
substitute label for the raw field key.
validate.string().label('Email address').email()
# → "The Email address field must be a valid email address."
Parameters
label(string)
Returns Validator
Validator.sometimes()
validate.Validator.sometimes() -> Validator
Skips the entire rule chain when the field is absent from the data dictionary or its value is nil / blank. Use this to mark fields as optional while still validating them when they are present.
var rules = validate.schema({
# "bio" is optional; when given it must be at most 500 chars.
bio: validate.string().max_length(500).sometimes(),
})
Returns Validator
Validator.bail()
validate.Validator.bail(enabled) -> Validator
Controls whether validation stops at the first failing rule for this
field. Defaults to true. Set to false to collect all errors.
Parameters
enabled(bool) — Passfalseto disable early stopping.
Returns Validator
Validator.required()
validate.Validator.required() -> Validator
The field must be present, non-nil, and non-empty.
Returns Validator
Validator.nullable()
validate.Validator.nullable() -> Validator
Marks the field as nullable. A nil value will pass all subsequent rules
without evaluation. Combine with sometimes() for a fully
optional-nullable field.
Returns Validator
Validator.string()
validate.Validator.string() -> Validator
The field value must be a string.
Returns Validator
Validator.number()
validate.Validator.number() -> Validator
The field value must be a number (integer or float).
Returns Validator
Validator.integer()
validate.Validator.integer() -> Validator
The field value must be an integer (no fractional part). Also accepts string representations of integers.
Returns Validator
Validator.boolean()
validate.Validator.boolean() -> Validator
The field value must be boolean or a boolean-like string/number.
Accepts: true, false, "true", "false", "1", "0", 1, 0.
Returns Validator
Validator.list()
validate.Validator.list() -> Validator
The field value must be a list.
Returns Validator
Validator.dict()
validate.Validator.dict() -> Validator
The field value must be a dictionary.
Returns Validator
Validator.numeric()
validate.Validator.numeric() -> Validator
The field value must be numeric: either a number type, or a string that converts cleanly to a number.
Returns Validator
Validator.size()
validate.Validator.size(n) -> Validator
The value’s size must equal n.
Size is: character count for strings, item count for lists/dicts, and numeric value for numbers.
Parameters
n(number)
Returns Validator
Validator.min()
validate.Validator.min(min) -> Validator
The value’s size must be at least min.
Parameters
min(number)
Returns Validator
Validator.max()
validate.Validator.max(max) -> Validator
The value’s size must be at most max.
Parameters
max(number)
Returns Validator
Validator.between()
validate.Validator.between(min, max) -> Validator
The value’s size must be between min and max (inclusive).
Parameters
min(number)max(number)
Returns Validator
Validator.length()
validate.Validator.length(n) -> Validator
The string’s character count must equal exactly n.
Parameters
n(number)
Returns Validator
Validator.min_length()
validate.Validator.min_length(min) -> Validator
The string must be at least min characters long.
Parameters
min(number)
Returns Validator
Validator.max_length()
validate.Validator.max_length(max) -> Validator
The string must be at most max characters long.
Parameters
max(number)
Returns Validator
Validator.length_between()
validate.Validator.length_between(min, max) -> Validator
The string’s length must be between min and max characters
(inclusive).
Parameters
min(number)max(number)
Returns Validator
Validator.gt()
validate.Validator.gt(n) -> Validator
The numeric value must be greater than n.
Parameters
n(number)
Returns Validator
Validator.gte()
validate.Validator.gte(n) -> Validator
The numeric value must be greater than or equal to n.
Parameters
n(number)
Returns Validator
Validator.lt()
validate.Validator.lt(n) -> Validator
The numeric value must be less than n.
Parameters
n(number)
Returns Validator
Validator.lte()
validate.Validator.lte(n) -> Validator
The numeric value must be less than or equal to n.
Parameters
n(number)
Returns Validator
Validator.positive()
validate.Validator.positive() -> Validator
The numeric value must be strictly positive (greater than zero).
Returns Validator
Validator.negative()
validate.Validator.negative() -> Validator
The numeric value must be strictly negative (less than zero).
Returns Validator
Validator.positive_or_zero()
validate.Validator.positive_or_zero() -> Validator
The numeric value must be zero or positive.
Returns Validator
Validator.negative_or_zero()
validate.Validator.negative_or_zero() -> Validator
The numeric value must be zero or negative.
Returns Validator
Validator.multiple_of()
validate.Validator.multiple_of(n) -> Validator
The numeric value must be a multiple of n.
Parameters
n(number)
Returns Validator
Validator.alpha()
validate.Validator.alpha() -> Validator
The string must contain only ASCII alphabetic characters (a-z, A-Z).
Returns Validator
Validator.alpha_num()
validate.Validator.alpha_num() -> Validator
The string must contain only ASCII alphanumeric characters.
Returns Validator
Validator.alpha_dash()
validate.Validator.alpha_dash() -> Validator
The string must contain only ASCII alphanumeric characters, hyphens, and underscores.
Returns Validator
Validator.starts_with()
validate.Validator.starts_with(prefixes) -> Validator
The string must start with one of the given prefixes.
Parameters
prefixes(string|list)
Returns Validator
Validator.doesnt_start_with()
validate.Validator.doesnt_start_with(prefixes) -> Validator
The string must not start with any of the given prefixes.
Parameters
prefixes(string|list)
Returns Validator
Validator.ends_with()
validate.Validator.ends_with(suffixes) -> Validator
The string must end with one of the given suffixes.
Parameters
suffixes(string|list)
Returns Validator
Validator.doesnt_end_with()
validate.Validator.doesnt_end_with(suffixes) -> Validator
The string must not end with any of the given suffixes.
Parameters
suffixes(string|list)
Returns Validator
Validator.contains()
validate.Validator.contains(needle) -> Validator
The string must contain the given substring.
Parameters
needle(string)
Returns Validator
Validator.doesnt_contain()
validate.Validator.doesnt_contain(needle) -> Validator
The string must not contain the given substring.
Parameters
needle(string)
Returns Validator
Validator.regex()
validate.Validator.regex(pattern) -> Validator
The string must match the given regular expression pattern.
Parameters
pattern(string)
Returns Validator
Validator.not_regex()
validate.Validator.not_regex(pattern) -> Validator
The string must not match the given regular expression pattern.
Parameters
pattern(string)
Returns Validator
Validator.lowercase()
validate.Validator.lowercase() -> Validator
The string must be entirely lowercase.
Returns Validator
Validator.uppercase()
validate.Validator.uppercase() -> Validator
The string must be entirely uppercase.
Returns Validator
Validator.not_blank()
validate.Validator.not_blank() -> Validator
The string must not consist entirely of whitespace characters.
Returns Validator
Validator.email()
validate.Validator.email() -> Validator
The value must be a syntactically valid email address.
Returns Validator
Validator.url()
validate.Validator.url() -> Validator
The value must be a valid HTTP or HTTPS URL.
Returns Validator
Validator.ipv4()
validate.Validator.ipv4() -> Validator
The value must be a valid IPv4 address.
Returns Validator
Validator.ipv6()
validate.Validator.ipv6() -> Validator
The value must be a valid IPv6 address.
Returns Validator
Validator.ip()
validate.Validator.ip() -> Validator
The value must be a valid IPv4 or IPv6 address.
Returns Validator
Validator.uuid()
validate.Validator.uuid() -> Validator
The value must be a valid canonical UUID
(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Returns Validator
Validator.json()
validate.Validator.json() -> Validator
The value must be a valid JSON string.
Returns Validator
Validator.date()
validate.Validator.date() -> Validator
The value must be a valid date string parseable by the date module.
Returns Validator
Validator.after()
validate.Validator.after(ref) -> Validator
The value must be a date after ref.
Parameters
ref(string) — A date string parseable by thedatemodule.
Returns Validator
Validator.after_or_equal()
validate.Validator.after_or_equal(ref) -> Validator
The value must be a date after or equal to ref.
Parameters
ref(string)
Returns Validator
Validator.before()
validate.Validator.before(ref) -> Validator
The value must be a date before ref.
Parameters
ref(string)
Returns Validator
Validator.before_or_equal()
validate.Validator.before_or_equal(ref) -> Validator
The value must be a date before or equal to ref.
Parameters
ref(string)
Returns Validator
Validator.timezone()
validate.Validator.timezone() -> Validator
The value must be a valid timezone identifier recognised by the date
module (e.g. "UTC", "Africa/Lagos").
Returns Validator
Validator.is_in()
validate.Validator.is_in(values) -> Validator
The value must be one of the given allowed values (strict comparison).
Parameters
values(list)
Returns Validator
Validator.not_in()
validate.Validator.not_in(values) -> Validator
The value must not be one of the given forbidden values.
Parameters
values(list)
Returns Validator
Validator.in_list()
validate.Validator.in_list(values) -> Validator
Every item in the list value must be contained in values.
Parameters
values(list)
Returns Validator
Validator.accepted()
validate.Validator.accepted() -> Validator
The value must be one of the accepted truthy representations: true,
"true", "yes", "on", "1", 1.
Returns Validator
Validator.declined()
validate.Validator.declined() -> Validator
The value must be one of the declined falsy representations: false,
"false", "no", "off", "0", 0.
Returns Validator
Validator.equals()
validate.Validator.equals(expected) -> Validator
The value must strictly equal expected.
Parameters
expected(any)
Returns Validator
Validator.not_equals()
validate.Validator.not_equals(forbidden) -> Validator
The value must not equal forbidden.
Parameters
forbidden(any)
Returns Validator
Validator.same()
validate.Validator.same(other_field) -> Validator
The value must match the value of other_field in the same data
dictionary. Commonly used to confirm passwords.
Parameters
other_field(string)
Returns Validator
Validator.different()
validate.Validator.different(other_field) -> Validator
The value must differ from the value of other_field.
Parameters
other_field(string)
Returns Validator
Validator.confirmed()
validate.Validator.confirmed() -> Validator
The value must match the {field_name}_confirmation sibling field.
Returns Validator
Validator.required_if()
validate.Validator.required_if(other_field, other_values) -> Validator
The field becomes required when other_field equals any value in
other_values.
Parameters
other_field(string)other_values(any|list)
Returns Validator
Validator.required_unless()
validate.Validator.required_unless(other_field, other_values) -> Validator
The field becomes required unless other_field equals any value in
other_values.
Parameters
other_field(string)other_values(any|list)
Returns Validator
Validator.required_with()
validate.Validator.required_with(fields) -> Validator
The field becomes required when any of the listed sibling fields are present and non-blank.
Parameters
fields(string|list)
Returns Validator
Validator.required_with_all()
validate.Validator.required_with_all(fields) -> Validator
The field becomes required when all of the listed sibling fields are present and non-blank.
Parameters
fields(string|list)
Returns Validator
Validator.required_without()
validate.Validator.required_without(fields) -> Validator
The field becomes required when any of the listed sibling fields are absent or blank.
Parameters
fields(string|list)
Returns Validator
Validator.required_without_all()
validate.Validator.required_without_all(fields) -> Validator
The field becomes required when all of the listed sibling fields are absent or blank.
Parameters
fields(string|list)
Returns Validator
Validator.prohibits()
validate.Validator.prohibits(fields) -> Validator
When this field is present, none of the listed sibling fields may also be present.
Parameters
fields(string|list)
Returns Validator
Validator.prohibited()
validate.Validator.prohibited() -> Validator
This field must be absent or nil: it is never allowed.
Returns Validator
Validator.prohibited_if()
validate.Validator.prohibited_if(other_field, other_values) -> Validator
The field must be absent when other_field equals any of
other_values.
Parameters
other_field(string)other_values(any|list)
Returns Validator
Validator.prohibited_unless()
validate.Validator.prohibited_unless(other_field, other_values) -> Validator
The field must be absent unless other_field equals any of
other_values.
Parameters
other_field(string)other_values(any|list)
Returns Validator
Validator.distinct()
validate.Validator.distinct() -> Validator
The list must not contain duplicate values.
Returns Validator
Validator.min_items()
validate.Validator.min_items(min) -> Validator
The list must have at least min items.
Parameters
min(number)
Returns Validator
Validator.max_items()
validate.Validator.max_items(max) -> Validator
The list must have at most max items.
Parameters
max(number)
Returns Validator
Validator.each()
validate.Validator.each(validator) -> Validator
Every item in the list must pass the given Validator chain.
var rules = validate.schema({
# A list of between 1 and 10 valid email strings.
recipients: validate.list()
.min_items(1).max_items(10)
.each(validate.string().email()),
})
Parameters
validator(Validator)
Returns Validator
Validator.is_nil()
validate.Validator.is_nil() -> Validator
The value must be nil.
Returns Validator
Validator.not_nil()
validate.Validator.not_nil() -> Validator
The value must not be nil.
Returns Validator
Validator.custom()
validate.Validator.custom(fn, message) -> Validator
Adds a custom inline validation rule backed by an anonymous function.
The function receives the field value and must return true to pass. An
optional message overrides the default error text.
var v = validate.string().custom(@(value) {
return value.starts_with('zuri-')
}, 'Must be a valid Zuri identifier.')
Parameters
fn(function) —@(value) -> boolmessage(string) — Optional custom error message.
Returns Validator
Validator.custom_with_data()
validate.Validator.custom_with_data(fn, message) -> Validator
Adds a custom inline rule whose function also receives the full data dictionary, allowing cross-field validation logic.
var v = validate.number().custom_with_data(@(value, data) {
return value < data.get('max_price', 0)
}, 'Must be less than max_price.')
Parameters
fn(function) —@(value, data) -> boolmessage(string) — Optional custom error message.
Returns Validator
Validator.use()
validate.Validator.use(rule_class) -> Validator
Adds a pre-constructed Rule subclass (the class itself, not an
instance) to the chain. Use this to attach custom Rule subclasses that
require no constructor arguments beyond the field name.
import validate { Rule, Validator }
class Palindrome < Rule {
validate(value) {
return value == ''.join(value.to_list().reverse())
}
error() {
return '${self.name} must be a palindrome.'
}
}
var v = Validator().string().use(Palindrome)
Parameters
rule_class(class) — A class that extendsRule.
Returns Validator
Validator.bail_enabled()
validate.Validator.bail_enabled() -> bool
Whether validation should stop at the first failing rule for this field
(see bail()).
Returns bool
Validator.is_sometimes()
validate.Validator.is_sometimes() -> bool
Whether this field’s whole chain should be skipped when the field is
absent or blank (see sometimes()).
Returns bool
Validator.get_label()
validate.Validator.get_label() -> ?string
This field’s human-readable label override, or nil if none was set
(see label()).
Returns ?string