Completed
Push — master ( 38deb0...7544ac )
by Anton
11s
created

CountryCodeRule   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 274
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 274
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
wmc 1
lcom 1
cbo 1

1 Method

Rating   Name   Duplication   Size   Complexity  
A validate() 0 4 1
1
<?php
2
/**
3
 * Bluz Framework Component
4
 *
5
 * @copyright Bluz PHP Team
6
 * @link      https://github.com/bluzphp/framework
7
 */
8
9
declare(strict_types=1);
10
11
namespace Bluz\Validator\Rule;
12
13
/**
14
 * Check for country code
15
 *
16
 * @package Bluz\Validator\Rule
17
 * @link    https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
18
 */
19
class CountryCodeRule extends AbstractRule
20
{
21
    /**
22
     * @var string error template
23
     */
24
    protected $description = 'must be a valid country code';
25
26
    /**
27
     * @var array list of valid country codes
28
     */
29
    protected $countryCodeList = [
30
        'AD',
31
        'AE',
32
        'AF',
33
        'AG',
34
        'AI',
35
        'AL',
36
        'AM',
37
        'AO',
38
        'AQ',
39
        'AR',
40
        'AS',
41
        'AT',
42
        'AU',
43
        'AW',
44
        'AX',
45
        'AZ',
46
        'BA',
47
        'BB',
48
        'BD',
49
        'BE',
50
        'BF',
51
        'BG',
52
        'BH',
53
        'BI',
54
        'BJ',
55
        'BL',
56
        'BM',
57
        'BN',
58
        'BO',
59
        'BQ',
60
        'BR',
61
        'BS',
62
        'BT',
63
        'BV',
64
        'BW',
65
        'BY',
66
        'BZ',
67
        'CA',
68
        'CC',
69
        'CD',
70
        'CF',
71
        'CG',
72
        'CH',
73
        'CI',
74
        'CK',
75
        'CL',
76
        'CM',
77
        'CN',
78
        'CO',
79
        'CR',
80
        'CU',
81
        'CV',
82
        'CW',
83
        'CX',
84
        'CY',
85
        'CZ',
86
        'DE',
87
        'DJ',
88
        'DK',
89
        'DM',
90
        'DO',
91
        'DZ',
92
        'EC',
93
        'EE',
94
        'EG',
95
        'EH',
96
        'ER',
97
        'ES',
98
        'ET',
99
        'FI',
100
        'FJ',
101
        'FK',
102
        'FM',
103
        'FO',
104
        'FR',
105
        'GA',
106
        'GB',
107
        'GD',
108
        'GE',
109
        'GF',
110
        'GG',
111
        'GH',
112
        'GI',
113
        'GL',
114
        'GM',
115
        'GN',
116
        'GP',
117
        'GQ',
118
        'GR',
119
        'GS',
120
        'GT',
121
        'GU',
122
        'GW',
123
        'GY',
124
        'HK',
125
        'HM',
126
        'HN',
127
        'HR',
128
        'HT',
129
        'HU',
130
        'ID',
131
        'IE',
132
        'IL',
133
        'IM',
134
        'IN',
135
        'IO',
136
        'IQ',
137
        'IR',
138
        'IS',
139
        'IT',
140
        'JE',
141
        'JM',
142
        'JO',
143
        'JP',
144
        'KE',
145
        'KG',
146
        'KH',
147
        'KI',
148
        'KM',
149
        'KN',
150
        'KP',
151
        'KR',
152
        'KW',
153
        'KY',
154
        'KZ',
155
        'LA',
156
        'LB',
157
        'LC',
158
        'LI',
159
        'LK',
160
        'LR',
161
        'LS',
162
        'LT',
163
        'LU',
164
        'LV',
165
        'LY',
166
        'MA',
167
        'MC',
168
        'MD',
169
        'ME',
170
        'MF',
171
        'MG',
172
        'MH',
173
        'MK',
174
        'ML',
175
        'MM',
176
        'MN',
177
        'MO',
178
        'MP',
179
        'MQ',
180
        'MR',
181
        'MS',
182
        'MT',
183
        'MU',
184
        'MV',
185
        'MW',
186
        'MX',
187
        'MY',
188
        'MZ',
189
        'NA',
190
        'NC',
191
        'NE',
192
        'NF',
193
        'NG',
194
        'NI',
195
        'NL',
196
        'NO',
197
        'NP',
198
        'NR',
199
        'NU',
200
        'NZ',
201
        'OM',
202
        'PA',
203
        'PE',
204
        'PF',
205
        'PG',
206
        'PH',
207
        'PK',
208
        'PL',
209
        'PM',
210
        'PN',
211
        'PR',
212
        'PS',
213
        'PT',
214
        'PW',
215
        'PY',
216
        'QA',
217
        'RE',
218
        'RO',
219
        'RS',
220
        'RU',
221
        'RW',
222
        'SA',
223
        'SB',
224
        'SC',
225
        'SD',
226
        'SE',
227
        'SG',
228
        'SH',
229
        'SI',
230
        'SJ',
231
        'SK',
232
        'SL',
233
        'SM',
234
        'SN',
235
        'SO',
236
        'SR',
237
        'SS',
238
        'ST',
239
        'SV',
240
        'SX',
241
        'SY',
242
        'SZ',
243
        'TC',
244
        'TD',
245
        'TF',
246
        'TG',
247
        'TH',
248
        'TJ',
249
        'TK',
250
        'TL',
251
        'TM',
252
        'TN',
253
        'TO',
254
        'TR',
255
        'TT',
256
        'TV',
257
        'TW',
258
        'TZ',
259
        'UA',
260
        'UG',
261
        'UM',
262
        'US',
263
        'UY',
264
        'UZ',
265
        'VA',
266
        'VC',
267
        'VE',
268
        'VG',
269
        'VI',
270
        'VN',
271
        'VU',
272
        'WF',
273
        'WS',
274
        'YE',
275
        'YT',
276
        'ZA',
277
        'ZM',
278
        'ZW'
279
    ];
280
281
    /**
282
     * Check for country code
283
     *
284
     * @param  string $input
285
     *
286
     * @return bool
287
     */
288 3
    public function validate($input): bool
289
    {
290 3
        return in_array(strtoupper($input), $this->countryCodeList, true);
291
    }
292
}
293