diff --git a/cake/libs/validation.php b/cake/libs/validation.php index fcf5e62df..be00c8a83 100644 --- a/cake/libs/validation.php +++ b/cake/libs/validation.php @@ -412,6 +412,37 @@ class Validation extends Object { } return false; } + +/** + * Time validation, determines if the string passed is a valid time. + * Validates time as 24hr (HH:MM) or am/pm ([H]H:MM[a|p]m) + * Does not allow/validate seconds. + * + * @param string $check a valid time string + * @return boolean Success + * @access public + */ + + function time($check) { + $_this =& Validation::getInstance(); + $_this->__reset(); + $_this->check = $check; + $_this->regex = '%^((0?[1-9]|1[012])(:[0-5]\d){0,2}([AP]M|[ap]m))$|^([01]\d|2[0-3])(:[0-5]\d){0,2}$%'; + return $_this->_check(); + } + +/** + * Boolean validation, determines if value passed is a boolean integer or true/false. + * + * @param string $check a valid boolean + * @return boolean Success + * @access public + */ + function boolean($check) { + $booleanList = array(0,1,'0','1',true,false); + return in_array($check, $booleanList, true); + } + /** * Checks that a value is a valid decimal. If $places is null, the $check is allowed to be a scientific float * If no decimal point is found a false will be returned. Both the sign and exponent are optional. @@ -868,4 +899,4 @@ class Validation extends Object { $_this->type = null; } } -?> \ No newline at end of file +?> diff --git a/cake/tests/cases/libs/validation.test.php b/cake/tests/cases/libs/validation.test.php index 3c5f57e15..e9762380c 100644 --- a/cake/tests/cases/libs/validation.test.php +++ b/cake/tests/cases/libs/validation.test.php @@ -1123,6 +1123,36 @@ class ValidationTestCase extends UnitTestCase { $this->assertFalse(Validation::date('12 06', array('my'))); } + function testTime() { + $this->assertTrue(Validation::time('00:00')); + $this->assertTrue(Validation::time('23:59')); + $this->assertFalse(Validation::time('24:00')); + $this->assertTrue(Validation::time('12:00')); + $this->assertTrue(Validation::time('12:01')); + $this->assertTrue(Validation::time('12:01am')); + $this->assertTrue(Validation::time('12:01pm')); + $this->assertTrue(Validation::time('1pm')); + $this->assertTrue(Validation::time('01:00')); + $this->assertFalse(Validation::time('1:00')); + $this->assertTrue(Validation::time('1:00pm')); + $this->assertFalse(Validation::time('13:00pm')); + $this->assertFalse(Validation::time('9:00')); + } + + function testBoolean() { + $this->assertTrue(Validation::boolean('0')); + $this->assertTrue(Validation::boolean('1')); + $this->assertTrue(Validation::boolean(0)); + $this->assertTrue(Validation::boolean(1)); + $this->assertTrue(Validation::boolean(true)); + $this->assertTrue(Validation::boolean(false)); + $this->assertFalse(Validation::boolean('true')); + $this->assertFalse(Validation::boolean('false')); + $this->assertFalse(Validation::boolean('-1')); + $this->assertFalse(Validation::boolean('2')); + $this->assertFalse(Validation::boolean('Boo!')); + } + function testDateCustomRegx() { $this->assertTrue(Validation::date('2006-12-27', null, '%^(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$%')); $this->assertFalse(Validation::date('12-27-2006', null, '%^(19|20)[0-9]{2}[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$%')); @@ -1489,4 +1519,4 @@ class ValidationTestCase extends UnitTestCase { // $this->assertTrue(Validation::file(TEST_CAKE_CORE_INCLUDE_PATH. 'VERSION.txt')); // } } -?> \ No newline at end of file +?>