public function set_rules ($name, $rules) { if ($rules == false) return false; if (is_array ($rules)) $rules = implode('|', $rules); // Change pipe if (! isset($this->rules[$name])) { $pipe = ''; $this->rules[$name] = ''; } else { $pipe = '|'; } foreach(explode('|', $rules) as $rule) { switch(substr($rule, 0, strpos($rule, '['))) { case 'required': $this->rules[$name] .= "{$pipe}required"; // Check if we are using meta-arrays if ($size = strtoarray ($rule)) { // Make min an integer $min = (int) $size[0]; // Max is an integer if the format was [2,3], otherwise false $max = (isset ($size[1])) ? (int) $size[1] : false; // No max and a min means exact length if ($max === false && $min > 0) $this->set_rules ($name, "exact_length[$min]"); // If min and max are the same, exact length elseif (($min == $max) && $min > 0) $this->set_rules ($name, "exact_length[$min]"); // Min and max are not both zero else { if ($min > 0) $this->set_rules ($name, "min_length[$min]"); if ($max > $min) $this->set_rules ($name, "max_length[$max]"); } } break; case 'allow': $types = strtoarray ($rule); $this->upload_rules[$name] = implode ('|', $types); break; default: $this->rules[$name] .= $pipe.$rule; break; } $pipe = "|"; } return true; }