errors = new Errors(); $this->validated = new Validated(); $this->validateUrl($request['url'], 8, 512); $this->validateTitle($request['title'], 2, 256); $this->validateTag($request['tag'], 2, 16); } private function validateUrl(string $url, int $minLength, int $maxLength): void { $url = trim($url); if (filter_var($url, FILTER_VALIDATE_URL) === false) { $this->errors->add('url', 'Must be a URL'); } if (strlen($url) < $minLength || strlen($url) > $maxLength) { $this->errors->add('url', "Must be between $minLength and $maxLength in characters in length"); } if (!$this->errors->has('url')) { $this->validated->url = $url; } } private function validateTitle(string $title, int $minLength, int $maxLength): void { $title = trim($title); if ($title === '') { return; } if (strlen($title) < $minLength || strlen($title) > $maxLength) { $this->errors->add('title', "Must be between $minLength and $maxLength in characters in length"); } if (!$this->errors->has('tite')) { $this->validated->title = $title; } } private function validateTag(string $tag, int $minLength, int $maxLength): void { $tag = trim($tag); if ($tag === '') { return; } if (strlen($tag) < $minLength || strlen($tag) > $maxLength) { $this->errors->add('tag', "Must be between $minLength and $maxLength in characters in length"); } if (preg_match('/\W/', $tag) === 1) { $this->errors->add('tag', 'May only contain word characters'); } if (!$this->errors->has('tag')) { $this->validated->tag = strtolower($tag); } } }