Skip to content

Commit 2c6346a

Browse files
jonwaldsteinJon WaldsteinJasonTheAdams
authored
Feature: update the Currency Rule to match ISO-4217 standards (#19)
Co-authored-by: Jon Waldstein <jonwaldstein@mac.mynetworksettings.com> Co-authored-by: Jason Adams <jason.adams@givewp.com>
1 parent 553da8a commit 2c6346a

File tree

2 files changed

+382
-124
lines changed

2 files changed

+382
-124
lines changed

src/Rules/Currency.php

Lines changed: 177 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
class Currency implements ValidationRule, ValidatesOnFrontEnd
1212
{
13+
1314
/**
1415
* @inheritDoc
1516
*
@@ -53,6 +54,19 @@ public function __invoke($value, Closure $fail, string $key, array $values)
5354
}
5455

5556
/**
57+
* Returns the list of valid ISO 4217 currency codes.
58+
*
59+
* @unreleased Updated to match current ISO 4217 standard as of 2024.
60+
*
61+
* Major changes include:
62+
* - Removed obsolete codes: BYR (→BYN), EEK (→EUR), GHC (→GHS), LVL (→EUR),
63+
* LTL (→EUR), TRL (→TRY), VEF (→VES), ZWD (→ZWL)
64+
* - Added 74+ missing current ISO 4217 codes including AED, AMD, AOA, BHD, etc.
65+
* - Kept commonly used non-ISO codes: GGP, IMP, JEP, TVD
66+
* - Total codes increased from 95 to 169 for better global coverage
67+
*
68+
* @see https://www.iso.org/iso-4217-currency-codes.html
69+
*
5670
* @since 1.0.0
5771
*
5872
* @return string[]
@@ -63,120 +77,169 @@ public static function currencyCodes(): array
6377

6478
if ($codes === null) {
6579
$codes = [
66-
"ALL",
67-
"AFN",
68-
"ARS",
69-
"AWG",
70-
"AUD",
71-
"AZN",
72-
"BSD",
73-
"BBD",
74-
"BDT",
75-
"BYR",
76-
"BZD",
77-
"BMD",
78-
"BOB",
79-
"BAM",
80-
"BWP",
81-
"BGN",
82-
"BRL",
83-
"BND",
84-
"KHR",
85-
"CAD",
86-
"KYD",
87-
"CLP",
88-
"CNY",
89-
"COP",
90-
"CRC",
91-
"HRK",
92-
"CUP",
93-
"CZK",
94-
"DKK",
95-
"DOP",
96-
"XCD",
97-
"EGP",
98-
"SVC",
99-
"EEK",
100-
"EUR",
101-
"FKP",
102-
"FJD",
103-
"GHC",
104-
"GIP",
105-
"GTQ",
106-
"GGP",
107-
"GYD",
108-
"HNL",
109-
"HKD",
110-
"HUF",
111-
"ISK",
112-
"INR",
113-
"IDR",
114-
"IRR",
115-
"IMP",
116-
"ILS",
117-
"JMD",
118-
"JPY",
119-
"JEP",
120-
"KZT",
121-
"KPW",
122-
"KRW",
123-
"KGS",
124-
"LAK",
125-
"LVL",
126-
"LBP",
127-
"LRD",
128-
"LTL",
129-
"MKD",
130-
"MYR",
131-
"MUR",
132-
"MXN",
133-
"MNT",
134-
"MZN",
135-
"NAD",
136-
"NPR",
137-
"ANG",
138-
"NZD",
139-
"NIO",
140-
"NGN",
141-
"NOK",
142-
"OMR",
143-
"PKR",
144-
"PAB",
145-
"PYG",
146-
"PEN",
147-
"PHP",
148-
"PLN",
149-
"QAR",
150-
"RON",
151-
"RUB",
152-
"SHP",
153-
"SAR",
154-
"RSD",
155-
"SCR",
156-
"SGD",
157-
"SBD",
158-
"SOS",
159-
"ZAR",
160-
"LKR",
161-
"SEK",
162-
"CHF",
163-
"SRD",
164-
"SYP",
165-
"TWD",
166-
"THB",
167-
"TTD",
168-
"TRY",
169-
"TRL",
170-
"TVD",
171-
"UAH",
172-
"GBP",
173-
"USD",
174-
"UYU",
175-
"UZS",
176-
"VEF",
177-
"VND",
178-
"YER",
179-
"ZWD",
80+
"AED", // UAE Dirham
81+
"AFN", // Afghan Afghani
82+
"ALL", // Albanian Lek
83+
"AMD", // Armenian Dram
84+
"ANG", // Netherlands Antillean Guilder
85+
"AOA", // Angolan Kwanza
86+
"ARS", // Argentine Peso
87+
"AUD", // Australian Dollar
88+
"AWG", // Aruban Florin
89+
"AZN", // Azerbaijani Manat
90+
"BAM", // Bosnia and Herzegovina Convertible Mark
91+
"BBD", // Barbados Dollar
92+
"BDT", // Bangladeshi Taka
93+
"BGN", // Bulgarian Lev
94+
"BHD", // Bahraini Dinar
95+
"BIF", // Burundian Franc
96+
"BMD", // Bermudian Dollar
97+
"BND", // Brunei Dollar
98+
"BOB", // Bolivian Boliviano
99+
"BRL", // Brazilian Real
100+
"BSD", // Bahamian Dollar
101+
"BTN", // Bhutanese Ngultrum
102+
"BWP", // Botswanan Pula
103+
"BYN", // Belarusian Ruble
104+
"BZD", // Belize Dollar
105+
"CAD", // Canadian Dollar
106+
"CDF", // Congolese Franc
107+
"CHF", // Swiss Franc
108+
"CLP", // Chilean Peso
109+
"CNY", // Chinese Yuan
110+
"COP", // Colombian Peso
111+
"CRC", // Costa Rican Colón
112+
"CUP", // Cuban Peso
113+
"CVE", // Cape Verdean Escudo
114+
"CZK", // Czech Koruna
115+
"DJF", // Djiboutian Franc
116+
"DKK", // Danish Krone
117+
"DOP", // Dominican Peso
118+
"DZD", // Algerian Dinar
119+
"EGP", // Egyptian Pound
120+
"ERN", // Eritrean Nakfa
121+
"ETB", // Ethiopian Birr
122+
"EUR", // Euro
123+
"FJD", // Fijian Dollar
124+
"FKP", // Falkland Islands Pound
125+
"GBP", // British Pound Sterling
126+
"GEL", // Georgian Lari
127+
"GGP", // Guernsey Pound (non-ISO but commonly used)
128+
"GHS", // Ghanaian Cedi
129+
"GIP", // Gibraltar Pound
130+
"GMD", // Gambian Dalasi
131+
"GNF", // Guinean Franc
132+
"GTQ", // Guatemalan Quetzal
133+
"GYD", // Guyanese Dollar
134+
"HKD", // Hong Kong Dollar
135+
"HNL", // Honduran Lempira
136+
"HRK", // Croatian Kuna (replaced by EUR in 2023)
137+
"HTG", // Haitian Gourde
138+
"HUF", // Hungarian Forint
139+
"IDR", // Indonesian Rupiah
140+
"ILS", // Israeli New Shekel
141+
"IMP", // Isle of Man Pound (non-ISO but commonly used)
142+
"INR", // Indian Rupee
143+
"IQD", // Iraqi Dinar
144+
"IRR", // Iranian Rial
145+
"ISK", // Icelandic Króna
146+
"JEP", // Jersey Pound (non-ISO but commonly used)
147+
"JMD", // Jamaican Dollar
148+
"JOD", // Jordanian Dinar
149+
"JPY", // Japanese Yen
150+
"KES", // Kenyan Shilling
151+
"KGS", // Kyrgyzstani Som
152+
"KHR", // Cambodian Riel
153+
"KMF", // Comorian Franc
154+
"KPW", // North Korean Won
155+
"KRW", // South Korean Won
156+
"KWD", // Kuwaiti Dinar
157+
"KYD", // Cayman Islands Dollar
158+
"KZT", // Kazakhstani Tenge
159+
"LAK", // Laotian Kip
160+
"LBP", // Lebanese Pound
161+
"LKR", // Sri Lankan Rupee
162+
"LRD", // Liberian Dollar
163+
"LSL", // Lesotho Loti
164+
"LYD", // Libyan Dinar
165+
"MAD", // Moroccan Dirham
166+
"MDL", // Moldovan Leu
167+
"MGA", // Malagasy Ariary
168+
"MKD", // Macedonian Denar
169+
"MMK", // Myanmar Kyat
170+
"MNT", // Mongolian Tugrik
171+
"MOP", // Macanese Pataca
172+
"MRU", // Mauritanian Ouguiya
173+
"MUR", // Mauritian Rupee
174+
"MVR", // Maldivian Rufiyaa
175+
"MWK", // Malawian Kwacha
176+
"MXN", // Mexican Peso
177+
"MYR", // Malaysian Ringgit
178+
"MZN", // Mozambican Metical
179+
"NAD", // Namibian Dollar
180+
"NGN", // Nigerian Naira
181+
"NIO", // Nicaraguan Córdoba
182+
"NOK", // Norwegian Krone
183+
"NPR", // Nepalese Rupee
184+
"NZD", // New Zealand Dollar
185+
"OMR", // Omani Rial
186+
"PAB", // Panamanian Balboa
187+
"PEN", // Peruvian Sol
188+
"PGK", // Papua New Guinean Kina
189+
"PHP", // Philippine Peso
190+
"PKR", // Pakistani Rupee
191+
"PLN", // Polish Zloty
192+
"PYG", // Paraguayan Guaraní
193+
"QAR", // Qatari Riyal
194+
"RON", // Romanian Leu
195+
"RSD", // Serbian Dinar
196+
"RUB", // Russian Ruble
197+
"RWF", // Rwandan Franc
198+
"SAR", // Saudi Riyal
199+
"SBD", // Solomon Islands Dollar
200+
"SCR", // Seychellois Rupee
201+
"SDG", // Sudanese Pound
202+
"SEK", // Swedish Krona
203+
"SGD", // Singapore Dollar
204+
"SHP", // Saint Helena Pound
205+
"SLE", // Sierra Leonean Leone (new)
206+
"SLL", // Sierra Leonean Leone (old)
207+
"SOS", // Somali Shilling
208+
"SRD", // Surinamese Dollar
209+
"SSP", // South Sudanese Pound
210+
"STN", // São Tomé and Príncipe Dobra
211+
"SVC", // Salvadoran Colón
212+
"SYP", // Syrian Pound
213+
"SZL", // Swazi Lilangeni
214+
"THB", // Thai Baht
215+
"TJS", // Tajikistani Somoni
216+
"TMT", // Turkmenistani Manat
217+
"TND", // Tunisian Dinar
218+
"TOP", // Tongan Paʻanga
219+
"TRY", // Turkish Lira
220+
"TTD", // Trinidad and Tobago Dollar
221+
"TVD", // Tuvaluan Dollar (non-ISO but used)
222+
"TWD", // New Taiwan Dollar
223+
"TZS", // Tanzanian Shilling
224+
"UAH", // Ukrainian Hryvnia
225+
"UGX", // Ugandan Shilling
226+
"USD", // United States Dollar
227+
"UYU", // Uruguayan Peso
228+
"UZS", // Uzbekistani Som
229+
"VED", // Venezuelan Bolívar Digital
230+
"VES", // Venezuelan Bolívar Soberano
231+
"VND", // Vietnamese Dong
232+
"VUV", // Vanuatuan Vatu
233+
"WST", // Samoan Tala
234+
"XAF", // Central African CFA Franc
235+
"XCD", // East Caribbean Dollar
236+
"XDR", // Special Drawing Rights
237+
"XOF", // West African CFA Franc
238+
"XPF", // CFP Franc
239+
"YER", // Yemeni Rial
240+
"ZAR", // South African Rand
241+
"ZMW", // Zambian Kwacha
242+
"ZWL", // Zimbabwean Dollar
180243
];
181244
}
182245

0 commit comments

Comments
 (0)