diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index f4fd6f2..5fc5c84 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -233,11 +233,17 @@ class Validator * * @param string $field * @param mixed $value + * @param array $params * @return bool */ - protected function validateInteger($field, $value) + protected function validateInteger($field, $value, $params) { - return preg_match('/^-?([0-9])+$/i', $value); + if (isset($params[0]) && (bool) $params[0]){ + //strict mode + return preg_match('/^-?([0-9])+$/i', $value); + } + + return filter_var($value, \FILTER_VALIDATE_INT) !== false; } /** diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index e5fe053..8ac6b2d 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -116,19 +116,33 @@ class ValidateTest extends BaseTestCase $this->assertTrue($v->validate()); } + public function testIntegerStrict(){ + + $v = new Validator(array('num' => ' 41243')); + $v->rule('integer', 'num'); + $this->assertTrue($v->validate()); + + $v = new Validator(array('num' => ' 41243')); + $v->rule('integer', 'num', true); + $this->assertFalse($v->validate()); + + $v = new Validator(array('num' => '+41243')); + $v->rule('integer', 'num'); + $this->assertTrue($v->validate()); + + + $v = new Validator(array('num' => '+41243')); + $v->rule('integer', 'num', true); + $this->assertFalse($v->validate()); + + } + public function testIntegerInvalid() { $v = new Validator(array('num' => '42.341569')); $v->rule('integer', 'num'); $this->assertFalse($v->validate()); - $v = new Validator(array('num' => ' 41243')); - $v->rule('integer', 'num'); - $this->assertFalse($v->validate()); - - $v = new Validator(array('num' => '+1231')); - $v->rule('integer', 'num'); - $this->assertFalse($v->validate()); $v = new Validator(array('num' => '--1231')); $v->rule('integer', 'num'); @@ -142,7 +156,7 @@ class ValidateTest extends BaseTestCase public function testIntegerWithMaxValidation() { $v = new Validator(array('num' => ' 4212341569')); - $v->rule('integer', 'num'); + $v->rule('integer', 'num', true); $v->rule('max', 'num', 1000); $this->assertFalse($v->validate()); }