From cb880e73b2e397e765dec573fd87f8f2119183ef Mon Sep 17 00:00:00 2001 From: Chris Cornutt Date: Tue, 5 Mar 2013 09:40:28 -0600 Subject: [PATCH] fixing some logic on the URL checking and adding new "contains" validator --- src/Valitron/Validator.php | 36 +++++++++++++++++++++++++++++++++--- tests/Valitron/Validate.php | 21 +++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/Valitron/Validator.php b/src/Valitron/Validator.php index 3282e4f..fefdafc 100644 --- a/src/Valitron/Validator.php +++ b/src/Valitron/Validator.php @@ -23,6 +23,7 @@ class Validator const ERROR_DEFAULT = 'Invalid'; + protected $validUrlPrefixes = array('http://', 'https://', 'ftp://'); /** * Setup validation @@ -241,6 +242,25 @@ class Validator return !$this->validateIn($field, $value, $params); } + /** + * Validate a field contains a given string + * + * @param string $field + * @param mixed $value + * @param array $params + * @return bool + */ + protected function validateContains($field, $value, $params) + { + if(!isset($params[0])) { + return false; + } + if (!is_string($params[0]) || !is_string($value)) { + return false; + } + return (strpos($value, $params[0]) !== false); + } + /** * Validate that a field is a valid IP address * @@ -274,7 +294,12 @@ class Validator */ protected function validateUrl($field, $value) { - return filter_var($value, FILTER_VALIDATE_URL) !== false; + foreach ($this->validUrlPrefixes as $prefix) { + if(strpos($value, $prefix) !== false) { + return filter_var($value, FILTER_VALIDATE_URL) !== false; + } + } + return false; } /** @@ -286,9 +311,14 @@ class Validator */ protected function validateUrlActive($field, $value) { - $url = str_replace(array('http://', 'https://', 'ftp://'), '', strtolower($value)); + foreach ($this->validUrlPrefixes as $prefix) { + if(strpos($value, $prefix) !== false) { + $url = str_replace($prefix, '', strtolower($value)); - return checkdnsrr($url); + return checkdnsrr($url); + } + } + return false; } /** diff --git a/tests/Valitron/Validate.php b/tests/Valitron/Validate.php index d70a573..be59089 100644 --- a/tests/Valitron/Validate.php +++ b/tests/Valitron/Validate.php @@ -396,5 +396,26 @@ class ValidateTest extends \PHPUnit_Framework_TestCase $v->rule('dateAfter', 'date', '2013-01-28'); $this->assertFalse($v->validate()); } + + public function testContainsValid() + { + $v = new Validator(array('test_string' => 'this is a test')); + $v->rule('contains', 'test_string', 'a test'); + $this->assertTrue($v->validate()); + } + + public function testContainsNotFound() + { + $v = new Validator(array('test_string' => 'this is a test')); + $v->rule('contains', 'test_string', 'foobar'); + $this->assertFalse($v->validate()); + } + + public function testContainsInvalidValue() + { + $v = new Validator(array('test_string' => 'this is a test')); + $v->rule('contains', 'test_string', array('test')); + $this->assertFalse($v->validate()); + } }