Skip to content

Comparison Rules

Comparison validation rules check field presence and compare values between fields.

RuleParametersExampleError Message
requiredallowEmpty?$v->rule('required', 'field'){field} is required
equalsotherField$v->rule('equals', 'field', 'other'){field} must match {0}
differentotherField$v->rule('different', 'field', 'other'){field} must be different from {0}
accepted$v->rule('accepted', 'field'){field} must be accepted

Note: Parameters marked with ? are optional.

Empty values: null, empty string '', or not set in data array.

// Apply to multiple fields
$v->rule('required', ['email', 'name', 'password']);
// Allow empty if key exists
$v->rule('required', 'field', true);

Uses strict comparison (===) to prevent type juggling attacks. Supports dot notation for nested fields.

Valid acceptance values: 'yes', 'on', 1, '1', true


Valicomb supports two syntax styles: rule-based (map rules to fields) and field-based (map fields to rules).

use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->rules([
'required' => [
['username'],
['email'],
['password'],
['password_confirmation']
],
'equals' => [
['password_confirmation', 'password'],
['email_confirmation', 'email']
],
'different' => [
['new_password', 'current_password'],
['new_email', 'current_email']
],
'accepted' => [
['terms_of_service'],
['privacy_policy']
]
]);
$v->validate();
use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->mapManyFieldsToRules([
'username' => ['required', ['lengthBetween', 3, 20]],
'email' => ['required', 'email'],
'email_confirmation' => ['required', ['equals', 'email']],
'password' => ['required', ['lengthMin', 8]],
'password_confirmation' => ['required', ['equals', 'password']],
'new_password' => ['required', ['different', 'current_password']],
'terms_of_service' => ['accepted'],
'newsletter' => ['optional', 'accepted']
]);
$v->validate();