From 20c465bfda721d48b85069f0ed3bfb5b46cb50f9 Mon Sep 17 00:00:00 2001 From: Robin van der Vliet Date: Thu, 9 May 2024 12:52:19 +0200 Subject: [PATCH 1/4] Create isISO31661Numeric.js --- src/lib/isISO31661Numeric.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/lib/isISO31661Numeric.js diff --git a/src/lib/isISO31661Numeric.js b/src/lib/isISO31661Numeric.js new file mode 100644 index 000000000..8b32a8d79 --- /dev/null +++ b/src/lib/isISO31661Numeric.js @@ -0,0 +1,26 @@ +import assertString from './util/assertString'; + +// from https://en.wikipedia.org/wiki/ISO_3166-1_numeric +const validISO31661NumericCountriesCodes = new Set([ + '004', '008', '010', '012', '016', '020', '024', '028', '031', '032', '036', '040', '044', '048', '050', '051', + '052', '056', '060', '064', '068', '070', '072', '074', '076', '084', '086', '090', '092', '096', '100', '104', + '108', '112', '116', '120', '124', '132', '136', '140', '144', '148', '152', '156', '158', '162', '166', '170', + '174', '175', '178', '180', '184', '188', '191', '192', '196', '203', '204', '208', '212', '214', '218', '222', + '226', '231', '232', '233', '234', '238', '239', '242', '246', '248', '250', '254', '258', '260', '262', '266', + '268', '270', '275', '276', '288', '292', '296', '300', '304', '308', '312', '316', '320', '324', '328', '332', + '334', '336', '340', '344', '348', '352', '356', '360', '364', '368', '372', '376', '380', '384', '388', '392', + '398', '400', '404', '408', '410', '414', '417', '418', '422', '426', '428', '430', '434', '438', '440', '442', + '446', '450', '454', '458', '462', '466', '470', '474', '478', '480', '484', '492', '496', '498', '499', '500', + '504', '508', '512', '516', '520', '524', '528', '531', '533', '534', '535', '540', '548', '554', '558', '562', + '566', '570', '574', '578', '580', '581', '583', '584', '585', '586', '591', '598', '600', '604', '608', '612', + '616', '620', '624', '626', '630', '634', '638', '642', '643', '646', '652', '654', '659', '660', '662', '663', + '666', '670', '674', '678', '682', '686', '688', '690', '694', '702', '703', '704', '705', '706', '710', '716', + '724', '728', '729', '732', '740', '744', '748', '752', '756', '760', '762', '764', '768', '772', '776', '780', + '784', '788', '792', '795', '796', '798', '800', '804', '807', '818', '826', '831', '832', '833', '834', '840', + '850', '854', '858', '860', '862', '876', '882', '887', '894', +]); + +export default function isISO31661Numeric(str) { + assertString(str); + return validISO31661NumericCountriesCodes.has(str); +} From f319a228463839f5572314050040d4ad71db30bc Mon Sep 17 00:00:00 2001 From: Robin van der Vliet Date: Thu, 9 May 2024 13:01:04 +0200 Subject: [PATCH 2/4] Add tests for ISO 3166-1 numeric country codes --- test/validators.test.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/validators.test.js b/test/validators.test.js index 3928a1c5c..6b603ff1b 100644 --- a/test/validators.test.js +++ b/test/validators.test.js @@ -11546,6 +11546,37 @@ describe('Validators', () => { }); }); + it('should validate ISO 3166-1 numeric country codes', () => { + // from https://en.wikipedia.org/wiki/ISO_3166-1_numeric + test({ + validator: 'isISO31661Numeric', + valid: [ + '076', + '208', + '276', + '348', + '380', + '410', + '440', + '528', + '554', + '826', + ], + invalid: [ + '', + 'NL', + 'NLD', + '002', + '197', + '249', + '569', + '810', + '900', + '999', + ], + }); + }); + it('should validate ISO 4217 corrency codes', () => { // from https://en.wikipedia.org/wiki/ISO_4217 test({ From 1361a6b8b8e4bf571c77500c8b9d59d9f80e1a03 Mon Sep 17 00:00:00 2001 From: Robin van der Vliet Date: Thu, 9 May 2024 13:08:53 +0200 Subject: [PATCH 3/4] Describe isISO31661Numeric in README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5b8bb7d68..4cf147635 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ Validator | Description **isISO8601(str [, options])** | check if the string is a valid [ISO 8601][ISO 8601] date.
`options` is an object which defaults to `{ strict: false, strictSeparator: false }`. If `strict` is true, date strings with invalid dates like `2009-02-29` will be invalid. If `strictSeparator` is true, date strings with date and time separated by anything other than a T will be invalid. **isISO31661Alpha2(str)** | check if the string is a valid [ISO 3166-1 alpha-2][ISO 3166-1 alpha-2] officially assigned country code. **isISO31661Alpha3(str)** | check if the string is a valid [ISO 3166-1 alpha-3][ISO 3166-1 alpha-3] officially assigned country code. +**isISO31661Numeric(str)** | check if the string is a valid [ISO 3166-1 numeric][ISO 3166-1 numeric] officially assigned country code. **isISO4217(str)** | check if the string is a valid [ISO 4217][ISO 4217] officially assigned currency code. **isISRC(str)** | check if the string is an [ISRC][ISRC]. **isISSN(str [, options])** | check if the string is an [ISSN][ISSN].

`options` is an object which defaults to `{ case_sensitive: false, require_hyphen: false }`. If `case_sensitive` is true, ISSNs with a lowercase `'x'` as the check digit are rejected. @@ -261,6 +262,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. [ISO 8601]: https://en.wikipedia.org/wiki/ISO_8601 [ISO 3166-1 alpha-2]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 [ISO 3166-1 alpha-3]: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3 +[ISO 3166-1 numeric]: https://en.wikipedia.org/wiki/ISO_3166-1_numeric [ISO 4217]: https://en.wikipedia.org/wiki/ISO_4217 [ISRC]: https://en.wikipedia.org/wiki/International_Standard_Recording_Code [ISSN]: https://en.wikipedia.org/wiki/International_Standard_Serial_Number From accd577f3e9cf2881a84738b66f6353c3152c737 Mon Sep 17 00:00:00 2001 From: Robin van der Vliet Date: Thu, 9 May 2024 13:15:57 +0200 Subject: [PATCH 4/4] Add isISO31661Numeric to index.js --- src/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/index.js b/src/index.js index ca0651de1..bba35572a 100644 --- a/src/index.js +++ b/src/index.js @@ -95,6 +95,7 @@ import isISO8601 from './lib/isISO8601'; import isRFC3339 from './lib/isRFC3339'; import isISO31661Alpha2 from './lib/isISO31661Alpha2'; import isISO31661Alpha3 from './lib/isISO31661Alpha3'; +import isISO31661Numeric from './lib/isISO31661Numeric'; import isISO4217 from './lib/isISO4217'; import isBase32 from './lib/isBase32'; @@ -210,6 +211,7 @@ const validator = { isRFC3339, isISO31661Alpha2, isISO31661Alpha3, + isISO31661Numeric, isISO4217, isBase32, isBase58,