Completed
Pull Request — master (#430)
by Anton
04:46
created

CountryCodeRule::validate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
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