diff --git a/src/Rule/ContainsUppercaseCharacters.php b/src/Rule/ContainsUppercaseCharacters.php new file mode 100644 index 0000000..7c586fc --- /dev/null +++ b/src/Rule/ContainsUppercaseCharacters.php @@ -0,0 +1,83 @@ +numberCharacters = $numberCharacters; + $this->strict = $strict; + $this->message = $message; + } + + /** + * Validates a value according to this rule and returns if it is valid or not + * @param mixed $v + * @return bool true if valid, otherwise false + */ + public function validate($v): bool + { + if($this->strict){ + return $this->countUpperCase($v)<=$this->numberCharacters; + } + return $this->countUpperCase($v)>=$this->numberCharacters; + } + + /** + * Returns the message to be used in case the validation did not pass + * @param mixed $v the value that did not pass the validation + * @return string + */ + public function getMessage($v): string + { + if($this->message){ + return $this->message; + } + if($this->strict){ + return "Number of uppercase characters exceeds ".${$this->numberCharacters}; + } + return "Number of uppercase characters should exceed ".${$this->numberCharacters}; + } + + /** + * @param string $message + * @return int + */ + private function countUpperCase(string $message): int + { + $lowerCase = strtolower($message); + $similar = similar_text($message, $lowerCase); + return strlen($message)-$similar; + } +} \ No newline at end of file diff --git a/tests/Rule/ContainsUppercaseCharactersTest.php b/tests/Rule/ContainsUppercaseCharactersTest.php new file mode 100644 index 0000000..09a3e7f --- /dev/null +++ b/tests/Rule/ContainsUppercaseCharactersTest.php @@ -0,0 +1,23 @@ +assertTrue($ruleFirst->validate("Test string")); + $this->assertFalse($ruleFirst->validate("Test String")); + $this->assertFalse($ruleSecond->validate('test string')); + $this->assertTrue($ruleSecond->validate('Test String')); + $this->assertEquals( "Custom Message", $ruleThird->getMessage("test string")); + $this->expectException(InvalidArgumentException::class); + $ruleFourth = new ContainsUppercaseCharacters(-1, true); + } +} \ No newline at end of file