From 7c990e39efe665b146f9bd87cf158b331b926f5f Mon Sep 17 00:00:00 2001 From: notona Date: Mon, 20 Feb 2017 12:18:18 +0900 Subject: [PATCH 1/5] fix integer validation process --- src/Valitron/Validator.php | 2 +- tests/Valitron/ValidateTest.php | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index 0e98596..f4fd6f2 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -237,7 +237,7 @@ class Validator */ protected function validateInteger($field, $value) { - return filter_var($value, \FILTER_VALIDATE_INT) !== false; + return preg_match('/^-?([0-9])+$/i', $value); } /** diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 4a91b33..e3ae2b0 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -110,6 +110,10 @@ class ValidateTest extends BaseTestCase $v = new Validator(array('num' => '41243')); $v->rule('integer', 'num'); $this->assertTrue($v->validate()); + + $v = new Validator(array('num' => '-41243')); + $v->rule('integer', 'num'); + $this->assertTrue($v->validate()); } public function testIntegerInvalid() @@ -117,6 +121,22 @@ class ValidateTest extends BaseTestCase $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'); + $this->assertFalse($v->validate()); + + $v = new Validator(array('num' => '0x3a')); + $v->rule('integer', 'num'); + $this->assertFalse($v->validate()); } public function testLengthValid() From bc035a4a953ef07a7e27a90da01a25ee9d21c376 Mon Sep 17 00:00:00 2001 From: notona Date: Mon, 20 Feb 2017 12:28:16 +0900 Subject: [PATCH 2/5] add more tests --- tests/Valitron/ValidateTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index e3ae2b0..ee3b34f 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -139,6 +139,14 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } + public function testIntegerWithMaxValidation() + { + $v = new Validator(array('num' => '4212341569')); + $v->rule('integer', 'num'); + $v->rule('max', 'num', 1000); + $this->assertFalse($v->validate()); + } + public function testLengthValid() { $v = new Validator(array('str' => 'happy')); From cb1ecb12e642fc5a8f944ebf079c3bff539b5ca2 Mon Sep 17 00:00:00 2001 From: notona Date: Mon, 20 Feb 2017 12:32:37 +0900 Subject: [PATCH 3/5] fix for test codes --- tests/Valitron/ValidateTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index ee3b34f..e5fe053 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -141,7 +141,7 @@ class ValidateTest extends BaseTestCase public function testIntegerWithMaxValidation() { - $v = new Validator(array('num' => '4212341569')); + $v = new Validator(array('num' => ' 4212341569')); $v->rule('integer', 'num'); $v->rule('max', 'num', 1000); $this->assertFalse($v->validate()); From 28d954817b61bb5aae4fa350820e8786c712793c Mon Sep 17 00:00:00 2001 From: Willem Wollebrants Date: Tue, 21 Feb 2017 21:11:14 +0100 Subject: [PATCH 4/5] Use an optional parameter to make validateInteger more strict --- src/Valitron/Validator.php | 10 ++++++++-- tests/Valitron/ValidateTest.php | 30 ++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 10 deletions(-) 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()); } From 1942e53a5c1e9bfe213cda3b102bef4fd0460e33 Mon Sep 17 00:00:00 2001 From: Willem Wollebrants Date: Tue, 21 Feb 2017 21:12:27 +0100 Subject: [PATCH 5/5] Remove unneeded test testIntegerWithMaxValidation --- tests/Valitron/ValidateTest.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/Valitron/ValidateTest.php b/tests/Valitron/ValidateTest.php index 8ac6b2d..490424e 100644 --- a/tests/Valitron/ValidateTest.php +++ b/tests/Valitron/ValidateTest.php @@ -153,14 +153,6 @@ class ValidateTest extends BaseTestCase $this->assertFalse($v->validate()); } - public function testIntegerWithMaxValidation() - { - $v = new Validator(array('num' => ' 4212341569')); - $v->rule('integer', 'num', true); - $v->rule('max', 'num', 1000); - $this->assertFalse($v->validate()); - } - public function testLengthValid() { $v = new Validator(array('str' => 'happy'));