Lua field-level input validation with rules
Lua
local schema = {
name = function(v) if type(v) ~= 'string' or #v < 2 then return 'must be at least 2 characters' end end,
age = function(v) if type(v) ~= 'number' or v < 18 or v % 1 ~= 0 then return 'must be an integer of 18 or more' end end,
email = function(v) if type(v) ~= 'string' or not v:match('^[%w._%%+-]+@[%w.-]+%.%a%a+$') then return 'must be a valid email' end end,
}
local function validate(input, rules)
local errors, clean = {}, {}
for field, check in pairs(rules) do
local err = check(input[field])
if err then errors[field] = err else clean[field] = input[field] end
end
if next(errors) then return nil, errors end
return clean
end
return { validate = validate, schema = schema }