1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
<?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'], 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);
}
}
}
|