Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

validate.validator

import validate.validator

validate lifts part of this module out to its own top level; each name below is shown with the path that reaches it. Anything still spelled validate.validator.* needs import 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) — Pass false to 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 the date module.

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) -> bool
  • message (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) -> bool
  • message (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 extends Rule.

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