Skip to content

Commit f866540

Browse files
authored
[12.x] Allows for strict numeric validation (#56328)
* Allows for strict numeric validation * style fix
1 parent 2c682e4 commit f866540

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/Illuminate/Validation/Concerns/ValidatesAttributes.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ public function validateDecimal($attribute, $value, $parameters)
642642
{
643643
$this->requireParameterCount(1, $parameters, 'decimal');
644644

645-
if (! $this->validateNumeric($attribute, $value)) {
645+
if (! $this->validateNumeric($attribute, $value, [])) {
646646
return false;
647647
}
648648

@@ -1863,7 +1863,7 @@ public function validateMultipleOf($attribute, $value, $parameters)
18631863
{
18641864
$this->requireParameterCount(1, $parameters, 'multiple_of');
18651865

1866-
if (! $this->validateNumeric($attribute, $value) || ! $this->validateNumeric($attribute, $parameters[0])) {
1866+
if (! $this->validateNumeric($attribute, $value, []) || ! $this->validateNumeric($attribute, $parameters[0], [])) {
18671867
return false;
18681868
}
18691869

@@ -1919,10 +1919,15 @@ public function validateNotIn($attribute, $value, $parameters)
19191919
*
19201920
* @param string $attribute
19211921
* @param mixed $value
1922+
* @param array{0: 'strict'} $parameters
19221923
* @return bool
19231924
*/
1924-
public function validateNumeric($attribute, $value)
1925+
public function validateNumeric($attribute, $value, array $parameters)
19251926
{
1927+
if (($parameters[0] ?? null) === 'strict' && is_string($value)) {
1928+
return false;
1929+
}
1930+
19261931
return is_numeric($value);
19271932
}
19281933

tests/Validation/ValidationValidatorTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3245,6 +3245,28 @@ public function testValidateNumeric()
32453245
$this->assertTrue($v->passes());
32463246
}
32473247

3248+
public function testValidateNumericStrict()
3249+
{
3250+
$trans = $this->getIlluminateArrayTranslator();
3251+
$v = new Validator($trans, ['foo' => 'asdad'], ['foo' => 'Numeric:strict']);
3252+
$this->assertFalse($v->passes());
3253+
3254+
$v = new Validator($trans, ['foo' => '1.23'], ['foo' => 'Numeric:strict']);
3255+
$this->assertFalse($v->passes());
3256+
3257+
$v = new Validator($trans, ['foo' => '-1'], ['foo' => 'Numeric:strict']);
3258+
$this->assertFalse($v->passes());
3259+
3260+
$v = new Validator($trans, ['foo' => '1'], ['foo' => 'Numeric:strict']);
3261+
$this->assertFalse($v->passes());
3262+
3263+
$v = new Validator($trans, ['foo' => 1], ['foo' => 'Numeric:strict']);
3264+
$this->assertTrue($v->passes());
3265+
3266+
$v = new Validator($trans, ['foo' => 0.1], ['foo' => 'Numeric:strict']);
3267+
$this->assertTrue($v->passes());
3268+
}
3269+
32483270
public function testValidateInteger()
32493271
{
32503272
$trans = $this->getIlluminateArrayTranslator();

0 commit comments

Comments
 (0)