Validation

The validation system provides 15+ built-in rules with support for custom validation.

Using Validation Presets

import { ValidationPresets } from '@schema-engine/forms/schemas/validation';
 
const emailRules = [
	ValidationPresets.string.required('Email is required'),
	ValidationPresets.string.email('Invalid email address'),
	ValidationPresets.string.maxLength(100, 'Email too long'),
];
 
const passwordRules = [
	ValidationPresets.string.required('Password is required'),
	ValidationPresets.string.minLength(8, 'At least 8 characters'),
	ValidationPresets.string.pattern(
		'^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)',
		'Must contain uppercase, lowercase, and number',
	),
];
 
const ageRules = [
	ValidationPresets.number.required('Age is required'),
	ValidationPresets.number.min(18, 'Must be 18 or older'),
	ValidationPresets.number.max(120, 'Invalid age'),
];

Available Presets

String

PresetDescription
required(message)Non-empty string
email(message)Valid email format
url(message)Valid URL format
uuid(message)Valid UUID
uuidv4(message)Valid UUID v4
minLength(min, message)Minimum string length
maxLength(max, message)Maximum string length
pattern(regex, message)Regex pattern match
ip(message)Valid IP address

Number

PresetDescription
required(message)Non-null number
min(min, message)Minimum value
max(max, message)Maximum value

Array

PresetDescription
required(message)Non-empty array
minItems(min, message)Minimum array length
maxItems(max, message)Maximum array length

Date

PresetDescription
date(message)Valid date
dateTime(message)Valid datetime
time(message)Valid time

In Form Configurations

Validation rules are applied to elements using the rules property:

{
	"$type": "input",
	"id": "email",
	"name": "email",
	"label": "Email Address",
	"inputType": "email",
	"rules": [
		{ "rule": "required", "message": "Email is required" },
		{ "rule": "email", "message": "Invalid email format" }
	]
}

Note: The property is rules, not validation.