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

CountryCodeRule::validate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
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
    public function validate($input): bool
289
    {
290
        return in_array(strtoupper($input), $this->countryCodeList, true);
291
    }
292
}
293