diff --git a/src/Symfony/Component/Validator/CHANGELOG.md b/src/Symfony/Component/Validator/CHANGELOG.md index 6d8b2a6c5a998..3ce7032d9c3fb 100644 --- a/src/Symfony/Component/Validator/CHANGELOG.md +++ b/src/Symfony/Component/Validator/CHANGELOG.md @@ -10,6 +10,7 @@ CHANGELOG * Deprecate passing an annotation reader to the constructor signature of `AnnotationLoader` * Deprecate `ValidatorBuilder::setDoctrineAnnotationReader()` * Deprecate `ValidatorBuilder::addDefaultDoctrineAnnotationReader()` + * Add `number`, `finite-number` and `finite-float` types to `Type` constraint 6.3 --- diff --git a/src/Symfony/Component/Validator/Constraints/TypeValidator.php b/src/Symfony/Component/Validator/Constraints/TypeValidator.php index ad9e31457268f..0b4513ac03fef 100644 --- a/src/Symfony/Component/Validator/Constraints/TypeValidator.php +++ b/src/Symfony/Component/Validator/Constraints/TypeValidator.php @@ -29,6 +29,9 @@ class TypeValidator extends ConstraintValidator 'float' => 'is_float', 'double' => 'is_float', 'real' => 'is_float', + 'number' => 'is_int || is_float && !is_nan', + 'finite-float' => 'is_float && is_finite', + 'finite-number' => 'is_int || is_float && is_finite', 'numeric' => 'is_numeric', 'string' => 'is_string', 'scalar' => 'is_scalar', @@ -69,7 +72,12 @@ public function validate(mixed $value, Constraint $constraint) foreach ($types as $type) { $type = strtolower($type); - if (isset(self::VALIDATION_FUNCTIONS[$type]) && self::VALIDATION_FUNCTIONS[$type]($value)) { + if (isset(self::VALIDATION_FUNCTIONS[$type]) && match ($type) { + 'finite-float' => \is_float($value) && is_finite($value), + 'finite-number' => \is_int($value) || \is_float($value) && is_finite($value), + 'number' => \is_int($value) || \is_float($value) && !is_nan($value), + default => self::VALIDATION_FUNCTIONS[$type]($value), + }) { return; } diff --git a/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php index 07a112b119d73..8b4fe25314b11 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/TypeValidatorTest.php @@ -88,6 +88,13 @@ public static function getValidValues() ['1.5', 'numeric'], [0, 'integer'], [1.5, 'float'], + [\NAN, 'float'], + [\INF, 'float'], + [1.5, 'finite-float'], + [0, 'number'], + [1.5, 'number'], + [\INF, 'number'], + [1.5, 'finite-number'], ['12345', 'string'], [[], 'array'], [$object, 'object'], @@ -135,7 +142,17 @@ public static function getInvalidValues() ['foobar', 'numeric', '"foobar"'], ['foobar', 'boolean', '"foobar"'], ['0', 'integer', '"0"'], + [\NAN, 'integer', 'NAN'], + [\INF, 'integer', 'INF'], ['1.5', 'float', '"1.5"'], + ['1.5', 'finite-float', '"1.5"'], + [\NAN, 'finite-float', 'NAN'], + [\INF, 'finite-float', 'INF'], + ['0', 'number', '"0"'], + [\NAN, 'number', 'NAN'], + ['0', 'finite-number', '"0"'], + [\NAN, 'finite-number', 'NAN'], + [\INF, 'finite-number', 'INF'], [12345, 'string', '12345'], [$object, 'boolean', 'object'], [$object, 'numeric', 'object'], pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy