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

CountryCodeRule   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 274
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

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