Skip to content

Type Rules

Type validation rules check object types and special formats like credit cards.

RuleParametersExampleError Message
instanceOfclass$v->rule('instanceOf', 'field', DateTime::class){field} must be an instance of {0}
creditCardtype?, allowedTypes?$v->rule('creditCard', 'field'){field} must be a valid credit card number

Note: Parameters marked with ? are optional.

The class parameter accepts a class name string or an object instance. Inheritance is respected:

$v->rule('instanceOf', 'obj', BaseClass::class); // ChildClass passes

Validates using the Luhn algorithm. Spaces and dashes are stripped automatically.

ParameterTypeDescription
typestring|array|nullCard type(s) to validate: visa, mastercard, amex, dinersclub, discover
allowedTypesarray|nullRestrict accepted types when type comes from client

Supported card types:

SlugCard TypePrefix Pattern
visaVisa4xxx
mastercardMastercard51-55, 2221-2720
amexAmerican Express34, 37
dinersclubDiners Club300-305, 36, 38
discoverDiscover6011, 644-649, 65

Examples:

// Any valid card
$v->rule('creditCard', 'card_number');
// Specific type
$v->rule('creditCard', 'card_number', 'visa');
// Multiple types
$v->rule('creditCard', 'card_number', ['visa', 'mastercard']);
// Client-provided type with restrictions
$v->rule('creditCard', 'card_number', $clientType, ['visa', 'mastercard']);

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([
'instanceOf' => [
['created_at', \DateTime::class],
['updated_at', \DateTime::class],
['user', User::class],
['logger', \Psr\Log\LoggerInterface::class]
],
'creditCard' => [
['card_number'],
['backup_card', ['visa', 'mastercard']]
]
]);
$v->validate();
use Frostybee\Valicomb\Validator;
$v = new Validator($data);
$v->mapManyFieldsToRules([
'card_number' => ['required', 'creditCard'],
'visa_card' => ['optional', ['creditCard', 'visa']],
'payment_card' => ['required', ['creditCard', ['visa', 'mastercard', 'amex']]],
'created_at' => ['required', ['instanceOf', \DateTime::class]],
'user' => ['required', ['instanceOf', User::class]],
'config' => ['optional', ['instanceOf', ConfigInterface::class]]
]);
$v->validate();