data = $data; } } private function setError($error) { $this->errors[] = $error; } public function getErrors() { return $this->errors; } public function getUniqueErrors() { return array_unique($this->errors); } public function isValid() { return sizeof($this->errors) < 1 ? true : false; } public function addRule($fields, $rule, $message) { if (is_array($fields)) { /* * Check array if they both are same */ $array = array(); foreach ($this->data as $key => $value) { if (in_array($key, $fields)) { $array[$key] = $value; //If rules is array then check the other fields also if (is_array($rule) && (sizeof($rule) == sizeof($message))) { //$rules size and message must be equal for ($i = 0; $i < sizeof($rule); $i++) { $this->ruleCheck($array[$key], $rule[$i], $message[$i]); } } else { //if there is only one rule $this->ruleCheck($array[$key], $rule, $message); } } } } else { /* * One element check */ if (array_key_exists($fields, $this->data)) { if (is_array($rule) && (sizeof($rule) == sizeof($message))) { //$rules size and message must be equal for ($i = 0; $i < sizeof($rule); $i++) { $this->ruleCheck($this->data[$fields], $rule[$i], $message[$i]); } } else { //if there is only one rule $this->ruleCheck($this->data[$fields], $rule, $message); } } } } private function ruleCheck($field, $rule, $message) { $this->validation = $rule; /* * Could add check if it is instance of iRUle */ if (!$this->validation->check($field)) { $this->setError($message); } } } interface iRule { public function check($word); } class RuleLength implements iRule { private $rules = array(); public function __construct($minimum) { $this->rules['min'] = $minimum; } public function check($word) { $size = strlen($word); return ($size >= $this->rules['min']) ? true : false; } } /* * Checks if the word is set or not */ class RuleRequired implements iRule { public function __construct() {} public function check($word) { $size = strlen($word); return ($size > 0) ? true : false; } } class RuleRegex implements iRule { private $rules = array(); public function __construct($pattern) { $this->rules['pattern'] = $pattern; } public function check($word) { return (preg_match($this->rules['pattern'], $word) != 0); } } if (isset($_POST['send'])) { $val = new Validator($_POST); $val->addRule(array('username', 'age', 'school'), new RuleRequired(), 'Check some fields!'); //test with two rules $val->addRule(array('username', 'age', 'school'), array(new RuleRequired(), new RuleLength(2)), array('Check the fields!', 'Minimum length is 2 chars!')); $val->addRule('username', array(new RuleRequired(), new RuleLength(2), new RuleRegex('([A-Z]+)')), array('You havent set the username!!', 'Username is too short !', 'Only caps!')); if ($val->isValid()) { echo 'It is OK'; } else { foreach ($val->getUniqueErrors() as $value) { echo "$value
"; } } } ?>
username :
age:
school: