Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
25 / 25 |
|
100.00% |
12 / 12 |
CRAP | |
100.00% |
1 / 1 |
Length | |
100.00% |
25 / 25 |
|
100.00% |
12 / 12 |
16 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
set | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
count | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
gt | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
ge | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
le | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
lt | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
equal | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
in | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
2 | |||
out | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
2 | |||
verifySignedInteger | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 | |||
verifyMinAndMaxLimen | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | /** |
4 | * @license MIT |
5 | * @author hazuki3417<hazuki3417@gmail.com> |
6 | * @copyright 2021 hazuki3417 all rights reserved. |
7 | */ |
8 | |
9 | namespace Selen\Str\Verify; |
10 | |
11 | use LogicException; |
12 | |
13 | class Length |
14 | { |
15 | /** @var string 検証対象の文字列 */ |
16 | private string $str; |
17 | |
18 | private function __construct(string $val) |
19 | { |
20 | $this->str = $val; |
21 | } |
22 | |
23 | public static function set(string $val): Length |
24 | { |
25 | return new self($val); |
26 | } |
27 | |
28 | /** |
29 | * 文字の長さを取得します. |
30 | * |
31 | * @return int 文字の長さを返します |
32 | */ |
33 | public function count(): int |
34 | { |
35 | return \mb_strlen($this->str); |
36 | } |
37 | |
38 | /** |
39 | * 文字数がしきい値より大きいか判定します. |
40 | * |
41 | * @param int $limen 検査する文字数のしきい値を指定します |
42 | * |
43 | * @throws LogicException しきい値に負数を指定した場合に発生します |
44 | * |
45 | * @return bool 文字数がしきい値より大きい場合はtrue、小さい場合はfalseを返します |
46 | */ |
47 | public function gt(int $limen): bool |
48 | { |
49 | $this->verifySignedInteger($limen); |
50 | |
51 | return $limen < $this->count(); |
52 | } |
53 | |
54 | /** |
55 | * 文字数がしきい値以上か判定します. |
56 | * |
57 | * @param int $limen 検査する文字数のしきい値を指定します |
58 | * |
59 | * @throws LogicException しきい値に負数を指定した場合に発生します |
60 | * |
61 | * @return bool 文字数がしきい値以上の場合はtrue、小さい場合はfalseを返します |
62 | */ |
63 | public function ge(int $limen): bool |
64 | { |
65 | $this->verifySignedInteger($limen); |
66 | |
67 | return $limen <= $this->count(); |
68 | } |
69 | |
70 | /** |
71 | * 文字数がしきい値以下か判定します. |
72 | * |
73 | * @param int $limen 検査する文字数のしきい値を指定します |
74 | * |
75 | * @throws LogicException しきい値に負数を指定した場合に発生します |
76 | * |
77 | * @return bool 文字数がしきい値以下の場合はtrue、小さい場合はfalseを返します |
78 | */ |
79 | public function le(int $limen): bool |
80 | { |
81 | $this->verifySignedInteger($limen); |
82 | |
83 | return $this->count() <= $limen; |
84 | } |
85 | |
86 | /** |
87 | * 文字数がしきい値より小さいか判定します. |
88 | * |
89 | * @param int $limen 検査する文字数のしきい値を指定します |
90 | * |
91 | * @throws LogicException しきい値に負数を指定した場合に発生します |
92 | * |
93 | * @return bool 文字数がしきい値より小さい場合はtrue、小さい場合はfalseを返します |
94 | */ |
95 | public function lt(int $limen): bool |
96 | { |
97 | $this->verifySignedInteger($limen); |
98 | |
99 | return $this->count() < $limen; |
100 | } |
101 | |
102 | /** |
103 | * 文字数がしきい値と同じか判定します. |
104 | * |
105 | * @param int $size 検査する文字数のしきい値を指定します |
106 | * |
107 | * @throws LogicException しきい値に負数を指定した場合に発生します |
108 | * |
109 | * @return bool 文字数がしきい値より小さい場合はtrue、小さい場合はfalseを返します |
110 | */ |
111 | public function equal(int $size): bool |
112 | { |
113 | $this->verifySignedInteger($size); |
114 | |
115 | return $this->count() === $size; |
116 | } |
117 | |
118 | /** |
119 | * 文字数が指定範囲内か判定します($min <= strLen <= $max). |
120 | * |
121 | * @param int $min 検査する文字数の最小しきい値を指定します |
122 | * @param int $max 検査する文字数の最大しきい値を指定します |
123 | * |
124 | * @throws LogicException しきい値に負数を指定した場合に発生します |
125 | * |
126 | * @return bool 文字数が指定範囲内の場合はtrue、指定範囲外の場合はfalseを返します |
127 | */ |
128 | public function in(int $min, int $max): bool |
129 | { |
130 | $this->verifySignedInteger($min); |
131 | $this->verifySignedInteger($max); |
132 | $this->verifyMinAndMaxLimen($min, $max); |
133 | |
134 | return $min <= $this->count() && $this->count() <= $max; |
135 | } |
136 | |
137 | /** |
138 | * 文字数が指定範囲外か判定します($min < strLen < $max). |
139 | * |
140 | * @param int $min 検査する文字数の最小しきい値を指定します |
141 | * @param int $max 検査する文字数の最大しきい値を指定します |
142 | * |
143 | * @throws LogicException しきい値に負数を指定した場合に発生します |
144 | * |
145 | * @return bool 文字数が指定範囲外の場合はtrue、指定範囲内の場合はfalseを返します |
146 | */ |
147 | public function out(int $min, int $max): bool |
148 | { |
149 | $this->verifySignedInteger($min); |
150 | $this->verifySignedInteger($max); |
151 | $this->verifyMinAndMaxLimen($min, $max); |
152 | |
153 | return $this->count() < $min || $max < $this->count(); |
154 | } |
155 | |
156 | /** |
157 | * 値が負数かどうか検証します. |
158 | * |
159 | * @param int $val 検証する値を渡します |
160 | * |
161 | * @throws LogicException 値が負数の場合に発生します |
162 | */ |
163 | private function verifySignedInteger(int $val): void |
164 | { |
165 | if ($val < 0) { |
166 | throw new LogicException('Signed integers cannot be specified.'); |
167 | } |
168 | } |
169 | |
170 | /** |
171 | * 最大値より大きい値を最小値に指定しているか検証します. |
172 | * |
173 | * @param int $min 検証する値を渡します |
174 | * @param int $max 検証する値を渡します |
175 | * |
176 | * @throws LogicException 最大値より大きい値を最小値に指定している倍位に発生します |
177 | */ |
178 | private function verifyMinAndMaxLimen(int $min, int $max): void |
179 | { |
180 | if ($min > $max) { |
181 | throw new LogicException('A value greater than max cannot be specified for min.'); |
182 | } |
183 | } |
184 | } |