Skip to content

Commit c1aa358

Browse files
Support strict mode for Integer and Boolean (#5895)
Co-authored-by: Deeka Wong <8337659+huangdijia@users.noreply.github.com>
1 parent c45e1ed commit c1aa358

File tree

2 files changed

+120
-2
lines changed

2 files changed

+120
-2
lines changed

src/Concerns/ValidatesAttributes.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,14 @@ public function validateBetween(string $attribute, $value, array $parameters): b
201201
*
202202
* @param mixed $value
203203
*/
204-
public function validateBoolean(string $attribute, $value): bool
204+
public function validateBoolean(string $attribute, $value, array $parameters = []): bool
205205
{
206206
$acceptable = [true, false, 0, 1, '0', '1'];
207207

208+
if (isset($parameters[0]) && strtolower($parameters[0]) == 'strict') {
209+
$acceptable = [true, false];
210+
}
211+
208212
return in_array($value, $acceptable, true);
209213
}
210214

@@ -681,8 +685,12 @@ public function validateInArray(string $attribute, $value, array $parameters): b
681685
*
682686
* @param mixed $value
683687
*/
684-
public function validateInteger(string $attribute, $value): bool
688+
public function validateInteger(string $attribute, $value, array $parameters = []): bool
685689
{
690+
if (isset($parameters[0]) && strtolower($parameters[0]) == 'strict' && gettype($value) != 'integer') {
691+
return false;
692+
}
693+
686694
return filter_var($value, FILTER_VALIDATE_INT) !== false;
687695
}
688696

tests/Cases/ValidationValidatorTest.php

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,116 @@ public function testValidateInt()
14691469
$this->assertTrue($v->passes());
14701470
}
14711471

1472+
public function testValidateIntStrict()
1473+
{
1474+
$translator = $this->getIlluminateArrayTranslator();
1475+
1476+
$validator = new Validator($translator, ['foo' => '1'], ['foo' => 'Int:strict']);
1477+
$this->assertFalse($validator->passes());
1478+
1479+
$validator = new Validator($translator, ['foo' => '-1'], ['foo' => 'Int:strict']);
1480+
$this->assertFalse($validator->passes());
1481+
1482+
$validator = new Validator($translator, ['foo' => '1.23'], ['foo' => 'Int:strict']);
1483+
$this->assertFalse($validator->passes());
1484+
1485+
$validator = new Validator($translator, ['foo' => 1.23], ['foo' => 'Int:strict']);
1486+
$this->assertFalse($validator->passes());
1487+
}
1488+
1489+
public function testValidateIntegerStrict()
1490+
{
1491+
$translator = $this->getIlluminateArrayTranslator();
1492+
1493+
$validator = new Validator($translator, ['foo' => '1'], ['foo' => 'Integer:strict']);
1494+
$this->assertFalse($validator->passes());
1495+
1496+
$validator = new Validator($translator, ['foo' => '-1'], ['foo' => 'Integer:strict']);
1497+
$this->assertFalse($validator->passes());
1498+
1499+
$validator = new Validator($translator, ['foo' => '1.23'], ['foo' => 'Integer:strict']);
1500+
$this->assertFalse($validator->passes());
1501+
1502+
$validator = new Validator($translator, ['foo' => 1.23], ['foo' => 'Integer:strict']);
1503+
$this->assertFalse($validator->passes());
1504+
}
1505+
1506+
public function testValidateBoolStrict()
1507+
{
1508+
$translator = $this->getIlluminateArrayTranslator();
1509+
1510+
$validator = new Validator($translator, ['foo' => 'no'], ['foo' => 'Bool:strict']);
1511+
$this->assertFalse($validator->passes());
1512+
1513+
$validator = new Validator($translator, ['foo' => 'yes'], ['foo' => 'Bool:strict']);
1514+
$this->assertFalse($validator->passes());
1515+
1516+
$validator = new Validator($translator, ['foo' => 'false'], ['foo' => 'Bool:strict']);
1517+
$this->assertFalse($validator->passes());
1518+
1519+
$validator = new Validator($translator, ['foo' => 'true'], ['foo' => 'Bool:strict']);
1520+
$this->assertFalse($validator->passes());
1521+
1522+
$validator = new Validator($translator, [], ['foo' => 'Bool:strict']);
1523+
$this->assertTrue($validator->passes());
1524+
1525+
$validator = new Validator($translator, ['foo' => false], ['foo' => 'Bool:strict']);
1526+
$this->assertTrue($validator->passes());
1527+
1528+
$validator = new Validator($translator, ['foo' => true], ['foo' => 'Bool:strict']);
1529+
$this->assertTrue($validator->passes());
1530+
1531+
$validator = new Validator($translator, ['foo' => '1'], ['foo' => 'Bool:strict']);
1532+
$this->assertFalse($validator->passes());
1533+
1534+
$validator = new Validator($translator, ['foo' => 1], ['foo' => 'Bool:strict']);
1535+
$this->assertFalse($validator->passes());
1536+
1537+
$validator = new Validator($translator, ['foo' => '0'], ['foo' => 'Bool:strict']);
1538+
$this->assertFalse($validator->passes());
1539+
1540+
$validator = new Validator($translator, ['foo' => 0], ['foo' => 'Bool:strict']);
1541+
$this->assertFalse($validator->passes());
1542+
}
1543+
1544+
public function testValidateBooleanStrict()
1545+
{
1546+
$translator = $this->getIlluminateArrayTranslator();
1547+
1548+
$validator = new Validator($translator, ['foo' => 'no'], ['foo' => 'Boolean:strict']);
1549+
$this->assertFalse($validator->passes());
1550+
1551+
$validator = new Validator($translator, ['foo' => 'yes'], ['foo' => 'Boolean:strict']);
1552+
$this->assertFalse($validator->passes());
1553+
1554+
$validator = new Validator($translator, ['foo' => 'false'], ['foo' => 'Boolean:strict']);
1555+
$this->assertFalse($validator->passes());
1556+
1557+
$validator = new Validator($translator, ['foo' => 'true'], ['foo' => 'Boolean:strict']);
1558+
$this->assertFalse($validator->passes());
1559+
1560+
$validator = new Validator($translator, [], ['foo' => 'Boolean:strict']);
1561+
$this->assertTrue($validator->passes());
1562+
1563+
$validator = new Validator($translator, ['foo' => false], ['foo' => 'Boolean:strict']);
1564+
$this->assertTrue($validator->passes());
1565+
1566+
$validator = new Validator($translator, ['foo' => true], ['foo' => 'Boolean:strict']);
1567+
$this->assertTrue($validator->passes());
1568+
1569+
$validator = new Validator($translator, ['foo' => '1'], ['foo' => 'Boolean:strict']);
1570+
$this->assertFalse($validator->passes());
1571+
1572+
$validator = new Validator($translator, ['foo' => 1], ['foo' => 'Boolean:strict']);
1573+
$this->assertFalse($validator->passes());
1574+
1575+
$validator = new Validator($translator, ['foo' => '0'], ['foo' => 'Boolean:strict']);
1576+
$this->assertFalse($validator->passes());
1577+
1578+
$validator = new Validator($translator, ['foo' => 0], ['foo' => 'Boolean:strict']);
1579+
$this->assertFalse($validator->passes());
1580+
}
1581+
14721582
public function testValidateDigits()
14731583
{
14741584
$trans = $this->getIlluminateArrayTranslator();

0 commit comments

Comments
 (0)