diff --git a/docs/rules/FilterVar.md b/docs/rules/FilterVar.md index 3bb63f58..1a6798f2 100644 --- a/docs/rules/FilterVar.md +++ b/docs/rules/FilterVar.md @@ -22,6 +22,7 @@ v::filterVar(FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME)->validate('@local'); Version | Description ---------|------------- + 2.3.0 | `v::filterVar(FILTER_VALIDATE_INT)->validate(0)` is no longer false 2.0.15 | Allow validating domains 0.8.0 | Created diff --git a/library/Rules/FilterVar.php b/library/Rules/FilterVar.php index 08935568..e1c01f66 100644 --- a/library/Rules/FilterVar.php +++ b/library/Rules/FilterVar.php @@ -15,7 +15,8 @@ namespace Respect\Validation\Rules; use Respect\Validation\Exceptions\ComponentException; -use function in_array; +use function array_key_exists; +use function filter_var; use function is_array; use function is_int; @@ -36,14 +37,14 @@ use const FILTER_VALIDATE_URL; final class FilterVar extends AbstractEnvelope { private const ALLOWED_FILTERS = [ - FILTER_VALIDATE_BOOLEAN, - FILTER_VALIDATE_DOMAIN, - FILTER_VALIDATE_EMAIL, - FILTER_VALIDATE_FLOAT, - FILTER_VALIDATE_INT, - FILTER_VALIDATE_IP, - FILTER_VALIDATE_REGEXP, - FILTER_VALIDATE_URL, + FILTER_VALIDATE_BOOLEAN => 'is_bool', + FILTER_VALIDATE_DOMAIN => 'is_string', + FILTER_VALIDATE_EMAIL => 'is_string', + FILTER_VALIDATE_FLOAT => 'is_float', + FILTER_VALIDATE_INT => 'is_int', + FILTER_VALIDATE_IP => 'is_string', + FILTER_VALIDATE_REGEXP => 'is_string', + FILTER_VALIDATE_URL => 'is_string', ]; /** @@ -55,7 +56,7 @@ final class FilterVar extends AbstractEnvelope */ public function __construct(int $filter, $options = null) { - if (!in_array($filter, self::ALLOWED_FILTERS)) { + if (!array_key_exists($filter, self::ALLOWED_FILTERS)) { throw new ComponentException('Cannot accept the given filter'); } @@ -64,6 +65,10 @@ final class FilterVar extends AbstractEnvelope $arguments[] = $options; } - parent::__construct(new Callback('filter_var', ...$arguments)); + parent::__construct(new Callback(static function ($input) use ($filter, $arguments) { + return (self::ALLOWED_FILTERS[$filter])( + filter_var($input, ...$arguments) + ); + })); } } diff --git a/tests/unit/Rules/FilterVarTest.php b/tests/unit/Rules/FilterVarTest.php index 99ba7ec9..bafa831a 100644 --- a/tests/unit/Rules/FilterVarTest.php +++ b/tests/unit/Rules/FilterVarTest.php @@ -60,6 +60,7 @@ final class FilterVarTest extends RuleTestCase [new FilterVar(FILTER_VALIDATE_BOOLEAN), 'On'], [new FilterVar(FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED), 'http://example.com?foo=bar'], [new FilterVar(FILTER_VALIDATE_DOMAIN), 'example.com'], + [new FilterVar(FILTER_VALIDATE_INT), '0'], ]; }