expect($closure)->toThrow(new InvalidArgumentException("Unexisting `abc` as validation handler.")); }); }); describe("::set()", function () { it("sets validation handlers", function () { Checker::set('zeroToNine', '/^[0-9]$/'); Checker::set('tenToNineteen', '/^1[0-9]$/'); expect(Checker::has('zeroToNine'))->toBe(true); expect(Checker::has('tenToNineteen'))->toBe(true); expect(Checker::get('zeroToNine'))->toBe('/^[0-9]$/'); expect(Checker::get('tenToNineteen'))->toBe('/^1[0-9]$/'); }); }); describe("::handlers()", function () { beforeEach(function () { Checker::reset(true); Checker::set('zeroToNine', '/^[0-9]$/'); }); it("gets some handlers", function () { expect(Checker::handlers())->toBe(['zeroToNine' => '/^[0-9]$/']); }); it("appends some handlers", function () { $expected = ['zeroToNine' => '/^[0-9]$/', 'tenToNineteen' => '/^1[0-9]$/']; expect(Checker::handlers(['tenToNineteen' => '/^1[0-9]$/']))->toBe($expected); expect(Checker::handlers())->toBe($expected); }); it("sets some handlers", function () { $expected = ['tenToNineteen' => '/^1[0-9]$/']; expect(Checker::handlers(['tenToNineteen' => '/^1[0-9]$/'], false))->toBe($expected); expect(Checker::handlers())->toBe($expected); });
}, 'lengthMin' => function ($value, $options = [], &$params = []) { $length = strlen($value); return isset($options['length']) && $length >= $options['length']; }, 'luhn' => function ($value, $options = [], &$params = []) { if (empty($value) || !is_string($value)) { return false; } $sum = 0; $length = strlen($value); for ($position = 1 - $length % 2; $position < $length; $position += 2) { $sum += $value[$position]; } for ($position = $length % 2; $position < $length; $position += 2) { $number = $value[$position] * 2; $sum += $number < 10 ? $number : $number - 9; } return $sum % 10 === 0; }, 'max' => function ($value, $options = [], &$params = []) { return isset($options['max']) && $value <= $options['max']; }, 'min' => function ($value, $options = [], &$params = []) { return isset($options['min']) && $value >= $options['min']; }, 'money' => ['right' => '/^(?!0,?\\d)(?:\\d{1,3}(?:([, .])\\d{3})?(?:\\1\\d{3})*|(?:\\d+))' . '((?!\\1)[,.]\\d{2})?(?<!\\x{00a2})\\p{Sc}?$/u', 'left' => '/^(?!\\x{00a2})\\p{Sc}?(?!0,?\\d)(?:\\d{1,3}(?:([, .])\\d{3})?' . '(?:\\1\\d{3})*|(?:\\d+))((?!\\1)[,.]\\d{2})?$/u'], 'numeric' => function ($value, $options = [], &$params = []) { return is_numeric($value); }, 'phone' => '/^\\+?[0-9\\(\\)\\-]{10,20}$/', 'regex' => '/^(?:([^[:alpha:]\\\\{<\\[\\(])(.+)(?:\\1))|(?:{(.+)})|(?:<(.+)>)|' . '(?:\\[(.+)\\])|(?:\\((.+)\\))[gimsxu]*$/', 'time' => '%^((0?[1-9]|1[012])(:[0-5]\\d){0,2}([AP]M|[ap]m))$|^([01]\\d|2[0-3])(:[0-5]\\d){0,2}$%', 'url' => function ($value, $options = [], &$params = []) { $options += ['flags' => []]; return (bool) filter_var($value, FILTER_VALIDATE_URL, $options); }, 'uuid' => "/^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}\$/"]); } } Checker::reset();