diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index b2562b8aaf47..5d4f32ec6438 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -1554,10 +1554,15 @@ public function validateInArrayKeys($attribute, $value, $parameters) * * @param string $attribute * @param mixed $value + * @param array{0: 'strict'} $parameters * @return bool */ - public function validateInteger($attribute, $value) + public function validateInteger($attribute, $value, array $parameters) { + if (($parameters[0] ?? null) === 'strict') { + return is_int($value); + } + return filter_var($value, FILTER_VALIDATE_INT) !== false; } diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 2fa7ae995e59..b23ac15dd5b0 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -3283,6 +3283,28 @@ public function testValidateInteger() $this->assertTrue($v->passes()); } + public function testValidateIntegerStrict() + { + $trans = $this->getIlluminateArrayTranslator(); + $v = new Validator($trans, ['foo' => 'asdad'], ['foo' => 'Integer:strict']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => '1.23'], ['foo' => 'Integer:strict']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => '-1'], ['foo' => 'Integer:strict']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Integer:strict']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 0.1], ['foo' => 'Integer:strict']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 1], ['foo' => 'Integer:strict']); + $this->assertTrue($v->passes()); + } + public function testValidateDecimal() { $trans = $this->getIlluminateArrayTranslator();