Use an optional parameter to make validateInteger more strict

This commit is contained in:
Willem Wollebrants 2017-02-21 21:11:14 +01:00
parent cb1ecb12e6
commit 28d954817b
2 changed files with 30 additions and 10 deletions

View File

@ -233,13 +233,19 @@ class Validator
* *
* @param string $field * @param string $field
* @param mixed $value * @param mixed $value
* @param array $params
* @return bool * @return bool
*/ */
protected function validateInteger($field, $value) protected function validateInteger($field, $value, $params)
{ {
if (isset($params[0]) && (bool) $params[0]){
//strict mode
return preg_match('/^-?([0-9])+$/i', $value); return preg_match('/^-?([0-9])+$/i', $value);
} }
return filter_var($value, \FILTER_VALIDATE_INT) !== false;
}
/** /**
* Validate the length of a string * Validate the length of a string
* *

View File

@ -116,19 +116,33 @@ class ValidateTest extends BaseTestCase
$this->assertTrue($v->validate()); $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() public function testIntegerInvalid()
{ {
$v = new Validator(array('num' => '42.341569')); $v = new Validator(array('num' => '42.341569'));
$v->rule('integer', 'num'); $v->rule('integer', 'num');
$this->assertFalse($v->validate()); $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 = new Validator(array('num' => '--1231'));
$v->rule('integer', 'num'); $v->rule('integer', 'num');
@ -142,7 +156,7 @@ class ValidateTest extends BaseTestCase
public function testIntegerWithMaxValidation() public function testIntegerWithMaxValidation()
{ {
$v = new Validator(array('num' => ' 4212341569')); $v = new Validator(array('num' => ' 4212341569'));
$v->rule('integer', 'num'); $v->rule('integer', 'num', true);
$v->rule('max', 'num', 1000); $v->rule('max', 'num', 1000);
$this->assertFalse($v->validate()); $this->assertFalse($v->validate());
} }