Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
12 / 12
CRAP
100.00% covered (success)
100.00%
1 / 1
Length
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
12 / 12
16
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 set
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 count
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 gt
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 ge
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 le
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 lt
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 equal
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 in
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 out
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 verifySignedInteger
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 verifyMinAndMaxLimen
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
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
9namespace Selen\Str\Verify;
10
11use LogicException;
12
13class 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}