summaryrefslogtreecommitdiff
path: root/src/DTS/Validator.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/DTS/Validator.php')
-rw-r--r--src/DTS/Validator.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/DTS/Validator.php b/src/DTS/Validator.php
new file mode 100644
index 0000000..7629e3b
--- /dev/null
+++ b/src/DTS/Validator.php
@@ -0,0 +1,81 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DTS;
+
+use DTS\Errors;
+use DTS\Validated;
+
+class Validator
+{
+ public Errors $errors;
+
+ public Validated $validated;
+
+ function __construct(array $request) {
+ $this->errors = new Errors();
+
+ $this->validated = new Validated();
+
+ $this->validateUrl($request['url'], 8, 512);
+
+ $this->validateTitle($request['title'], 8, 256);
+
+ $this->validateTag($request['tag'], 2, 8);
+ }
+
+ 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);
+ }
+ }
+}