Skip to content

Type Rules

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

Rule Parameters Example Error Message
instanceOf class $v->rule('instanceOf', 'field', DateTime::class) {field} must be an instance of {0}
creditCard type?, 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.

Parameter Type Description
type string|array|null Card type(s) to validate: visa, mastercard, amex, dinersclub, discover
allowedTypes array|null Restrict accepted types when type comes from client

Supported card types:

Slug Card Type Prefix Pattern
visa Visa 4xxx
mastercard Mastercard 51-55, 2221-2720
amex American Express 34, 37
dinersclub Diners Club 300-305, 36, 38
discover Discover 6011, 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->forFields([
'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();
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();