validates_zipcode 0.2.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  # This file was generated by Appraisal
2
3
 
3
- source "https://rubygems.org"
4
+ source 'https://rubygems.org'
4
5
 
5
- gem "activemodel", "~> 5.2.0"
6
+ gem 'activemodel', '~> 5.2.0'
6
7
 
7
- gemspec path: "../"
8
+ gemspec path: '../'
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- validates_zipcode (0.2.4)
5
- activemodel (>= 3.2.0)
4
+ validates_zipcode (0.5.0)
5
+ activemodel (>= 4.2.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -18,12 +18,19 @@ GEM
18
18
  bundler
19
19
  rake
20
20
  thor (>= 0.14.0)
21
+ ast (2.4.0)
21
22
  concurrent-ruby (1.1.4)
22
23
  diff-lcs (1.3)
23
24
  i18n (1.5.3)
24
25
  concurrent-ruby (~> 1.0)
25
26
  minitest (5.11.3)
26
- rake (12.2.1)
27
+ parallel (1.19.1)
28
+ parser (2.7.1.2)
29
+ ast (~> 2.4.0)
30
+ rack (2.2.2)
31
+ rainbow (3.0.0)
32
+ rake (13.0.1)
33
+ rexml (3.2.4)
27
34
  rspec (3.8.0)
28
35
  rspec-core (~> 3.8.0)
29
36
  rspec-expectations (~> 3.8.0)
@@ -37,10 +44,26 @@ GEM
37
44
  diff-lcs (>= 1.2.0, < 2.0)
38
45
  rspec-support (~> 3.8.0)
39
46
  rspec-support (3.8.0)
47
+ rubocop (0.84.0)
48
+ parallel (~> 1.10)
49
+ parser (>= 2.7.0.1)
50
+ rainbow (>= 2.2.2, < 4.0)
51
+ rexml
52
+ rubocop-ast (>= 0.0.3)
53
+ ruby-progressbar (~> 1.7)
54
+ unicode-display_width (>= 1.4.0, < 2.0)
55
+ rubocop-ast (0.0.3)
56
+ parser (>= 2.7.0.1)
57
+ rubocop-rails (2.5.2)
58
+ activesupport
59
+ rack (>= 1.1)
60
+ rubocop (>= 0.72.0)
61
+ ruby-progressbar (1.10.1)
40
62
  thor (0.20.3)
41
63
  thread_safe (0.3.6)
42
64
  tzinfo (1.2.5)
43
65
  thread_safe (~> 0.1)
66
+ unicode-display_width (1.7.0)
44
67
 
45
68
  PLATFORMS
46
69
  ruby
@@ -49,9 +72,11 @@ DEPENDENCIES
49
72
  activemodel (~> 5.2.0)
50
73
  appraisal
51
74
  bundler
52
- rake (~> 12.2.1)
75
+ rake (>= 12.3.3)
53
76
  rspec
77
+ rubocop
78
+ rubocop-rails
54
79
  validates_zipcode!
55
80
 
56
81
  BUNDLED WITH
57
- 2.0.1
82
+ 2.1.4
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # This file was generated by Appraisal
3
+
4
+ source 'https://rubygems.org'
5
+
6
+ gem 'activemodel', '~> 6.1.0'
7
+
8
+ gemspec path: '../'
@@ -0,0 +1,85 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ validates_zipcode (0.5.0)
5
+ activemodel (>= 4.2.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (6.1.3)
11
+ activesupport (= 6.1.3)
12
+ activesupport (6.1.3)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ zeitwerk (~> 2.3)
18
+ appraisal (2.4.0)
19
+ bundler
20
+ rake
21
+ thor (>= 0.14.0)
22
+ ast (2.4.2)
23
+ concurrent-ruby (1.1.8)
24
+ diff-lcs (1.4.4)
25
+ i18n (1.8.9)
26
+ concurrent-ruby (~> 1.0)
27
+ minitest (5.14.4)
28
+ parallel (1.20.1)
29
+ parser (3.0.0.0)
30
+ ast (~> 2.4.1)
31
+ rack (2.2.3)
32
+ rainbow (3.0.0)
33
+ rake (13.0.3)
34
+ regexp_parser (2.1.1)
35
+ rexml (3.2.4)
36
+ rspec (3.10.0)
37
+ rspec-core (~> 3.10.0)
38
+ rspec-expectations (~> 3.10.0)
39
+ rspec-mocks (~> 3.10.0)
40
+ rspec-core (3.10.1)
41
+ rspec-support (~> 3.10.0)
42
+ rspec-expectations (3.10.1)
43
+ diff-lcs (>= 1.2.0, < 2.0)
44
+ rspec-support (~> 3.10.0)
45
+ rspec-mocks (3.10.2)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.10.0)
48
+ rspec-support (3.10.2)
49
+ rubocop (1.11.0)
50
+ parallel (~> 1.10)
51
+ parser (>= 3.0.0.0)
52
+ rainbow (>= 2.2.2, < 4.0)
53
+ regexp_parser (>= 1.8, < 3.0)
54
+ rexml
55
+ rubocop-ast (>= 1.2.0, < 2.0)
56
+ ruby-progressbar (~> 1.7)
57
+ unicode-display_width (>= 1.4.0, < 3.0)
58
+ rubocop-ast (1.4.1)
59
+ parser (>= 2.7.1.5)
60
+ rubocop-rails (2.9.1)
61
+ activesupport (>= 4.2.0)
62
+ rack (>= 1.1)
63
+ rubocop (>= 0.90.0, < 2.0)
64
+ ruby-progressbar (1.11.0)
65
+ thor (1.1.0)
66
+ tzinfo (2.0.4)
67
+ concurrent-ruby (~> 1.0)
68
+ unicode-display_width (2.0.0)
69
+ zeitwerk (2.4.2)
70
+
71
+ PLATFORMS
72
+ ruby
73
+
74
+ DEPENDENCIES
75
+ activemodel (~> 6.1.0)
76
+ appraisal
77
+ bundler
78
+ rake (>= 12.3.3)
79
+ rspec
80
+ rubocop
81
+ rubocop-rails
82
+ validates_zipcode!
83
+
84
+ BUNDLED WITH
85
+ 2.1.4
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  # This file was generated by Appraisal
2
3
 
3
- source "https://rubygems.org"
4
+ source 'https://rubygems.org'
4
5
 
5
- gem "activemodel", github: "rails/rails"
6
+ gem 'activemodel', github: 'rails/rails'
6
7
 
7
- gemspec path: "../"
8
+ gemspec path: '../'
@@ -14,8 +14,8 @@ GIT
14
14
  PATH
15
15
  remote: ..
16
16
  specs:
17
- validates_zipcode (0.2.2)
18
- activemodel (>= 3.2.0)
17
+ validates_zipcode (0.5.0)
18
+ activemodel (>= 4.2.0)
19
19
 
20
20
  GEM
21
21
  remote: https://rubygems.org/
@@ -24,12 +24,19 @@ GEM
24
24
  bundler
25
25
  rake
26
26
  thor (>= 0.14.0)
27
+ ast (2.4.0)
27
28
  concurrent-ruby (1.1.5)
28
29
  diff-lcs (1.3)
29
30
  i18n (1.6.0)
30
31
  concurrent-ruby (~> 1.0)
31
32
  minitest (5.11.3)
32
- rake (12.2.1)
33
+ parallel (1.19.1)
34
+ parser (2.7.1.2)
35
+ ast (~> 2.4.0)
36
+ rack (2.2.2)
37
+ rainbow (3.0.0)
38
+ rake (13.0.1)
39
+ rexml (3.2.4)
33
40
  rspec (3.8.0)
34
41
  rspec-core (~> 3.8.0)
35
42
  rspec-expectations (~> 3.8.0)
@@ -43,10 +50,26 @@ GEM
43
50
  diff-lcs (>= 1.2.0, < 2.0)
44
51
  rspec-support (~> 3.8.0)
45
52
  rspec-support (3.8.0)
53
+ rubocop (0.84.0)
54
+ parallel (~> 1.10)
55
+ parser (>= 2.7.0.1)
56
+ rainbow (>= 2.2.2, < 4.0)
57
+ rexml
58
+ rubocop-ast (>= 0.0.3)
59
+ ruby-progressbar (~> 1.7)
60
+ unicode-display_width (>= 1.4.0, < 2.0)
61
+ rubocop-ast (0.0.3)
62
+ parser (>= 2.7.0.1)
63
+ rubocop-rails (2.5.2)
64
+ activesupport
65
+ rack (>= 1.1)
66
+ rubocop (>= 0.72.0)
67
+ ruby-progressbar (1.10.1)
46
68
  thor (0.20.3)
47
69
  thread_safe (0.3.6)
48
70
  tzinfo (1.2.5)
49
71
  thread_safe (~> 0.1)
72
+ unicode-display_width (1.7.0)
50
73
  zeitwerk (2.1.6)
51
74
 
52
75
  PLATFORMS
@@ -56,9 +79,11 @@ DEPENDENCIES
56
79
  activemodel!
57
80
  appraisal
58
81
  bundler
59
- rake (~> 12.2.1)
82
+ rake (>= 12.3.3)
60
83
  rspec
84
+ rubocop
85
+ rubocop-rails
61
86
  validates_zipcode!
62
87
 
63
88
  BUNDLED WITH
64
- 2.0.1
89
+ 2.1.4
@@ -1,13 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
  require 'validates_zipcode/railtie' if defined?(Rails)
3
3
  require 'validates_zipcode/cldr_regex_collection'
4
+ require 'validates_zipcode/invalid_zipcode_error'
4
5
  require 'validates_zipcode/validator'
5
6
  require 'validates_zipcode/helper_methods'
6
7
  require 'validates_zipcode/version'
7
8
  require 'validates_zipcode/zipcode'
9
+ require 'validates_zipcode/formatter'
8
10
 
9
11
  module ValidatesZipcode
10
- def self.valid?(zipcode, country_alpha2, options = {})
11
- ValidatesZipcode::Zipcode.new(options.merge(zipcode: zipcode, country_alpha2: country_alpha2)).valid?
12
+ def self.valid?(*args)
13
+ build_zipcode(*args).valid?
14
+ end
15
+
16
+ def self.format(*args)
17
+ build_zipcode(*args).format
18
+ end
19
+
20
+ def self.build_zipcode(zipcode, country_alpha2, options = {})
21
+ ValidatesZipcode::Zipcode.new(options.merge(zipcode: zipcode, country_alpha2: country_alpha2))
12
22
  end
13
23
  end
@@ -9,9 +9,9 @@ module ValidatesZipcode
9
9
  UK: /\AGIR ?0AA|((([A-Z]\d{1,2})|(([A-Z][A-HJ-Y]\d{1,2})|(([A-Z]\d[A-Z])|([A-Z][A-HJ-Y]\d?[A-Z])))) ?\d[A-Z]{2})\z/i,
10
10
  # GB: /\AGIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}\z/i,
11
11
  # UK: /\A([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)\z/,
12
- JE: /\AJE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}\z/,
13
- GG: /\AGY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}\z/,
14
- IM: /\AIM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}\z/,
12
+ JE: /\AJE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}\z/i,
13
+ GG: /\AGY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}\z/i,
14
+ IM: /\AIM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}\z/i,
15
15
  US: /\A\d{5}([ \-](?:\d{4}|\d{6}))?\z/,
16
16
  IE: /\A([AC-FHKNPRTV-Y]\d{2}|D6W)\s?[0-9AC-FHKNPRTV-Y]{4}\z/,
17
17
  CA: /\A[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d\z/,
@@ -21,7 +21,7 @@ module ValidatesZipcode
21
21
  CH: /\A\d{4}\z/,
22
22
  AT: /\A\d{4}\z/,
23
23
  ES: /\A\d{5}\z/,
24
- NL: /\A\d{4}[ ]?[A-Z]{2}\z/,
24
+ NL: /\A[1-9]\d{3}[ ]?(S[BCE-RT-Z]|[A-RT-Z][A-Z])\z/,
25
25
  BE: /\A\d{4}\z/,
26
26
  DK: /\A\d{4}\z/,
27
27
  NO: /\A\d{4}\z/,
@@ -32,16 +32,15 @@ module ValidatesZipcode
32
32
  SG: /\A\d{6}\z/,
33
33
  DZ: /\A\d{5}\z/,
34
34
  AD: /\AAD\d{3}\z/,
35
- AR: /\A([A-HJ-NP-Z]{1}\d{4}[A-Z]{3}|[a-z]{1}\d{4}[a-hj-tp-z]{3})\z/,
36
- # AR: /\A([A-HJ-NP-Z])?\d{4}([A-Z]{3})?\z/,
35
+ AR: /\A[A-HJ-NP-Z]{1}\d{4}([A-Z]{3})?\z/,
37
36
  AM: /\A(37)?\d{4}\z/,
38
- BH: /\A((1[0-2]|[2-9])\d{2})?\z/,
37
+ BH: /\A(1[0-2]|[1-9])\d{2}\z/,
39
38
  BD: /\A\d{4}\z/,
40
- BB: /\A(BB\d{5})?\z/,
39
+ BB: /\ABB([1-2]\d{4}|15156667)\z/,
41
40
  BY: /\A\d{6}\z/,
42
41
  BM: /\A[A-Z]{2}[ ]?[A-Z0-9]{2}\z/,
43
42
  BA: /\A\d{5}\z/,
44
- BN: /\A[A-Z]{2}[ ]?\d{4}\z/,
43
+ BN: /\A[BKTP][A-Z][ ]?\d{4}\z/i,
45
44
  BG: /\A\d{4}\z/,
46
45
  KH: /\A\d{5}\z/,
47
46
  CV: /\A\d{4}\z/,
@@ -50,7 +49,7 @@ module ValidatesZipcode
50
49
  CY: /\A\d{4}\z/,
51
50
  CZ: /\A[1-7][0-9]{2}[ ]?\d{2}\z/,
52
51
  DO: /\A\d{5}\z/,
53
- EC: /\A([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?\z/,
52
+ EC: /\A\d{6}\z/,
54
53
  EE: /\A\d{5}\z/,
55
54
  FO: /\A\d{3}\z/,
56
55
  GE: /\A\d{4}\z/,
@@ -61,29 +60,29 @@ module ValidatesZipcode
61
60
  IS: /\A\d{3}\z/,
62
61
  IN: /\A\d{6}\z/,
63
62
  ID: /\A\d{5}\z/,
64
- IL: /\A\d{5,7}\z/,
63
+ IL: /\A(\d{5}|\d{7})\z/,
65
64
  JO: /\A\d{5}\z/,
66
65
  KZ: /\A\d{6}\z/,
67
66
  KE: /\A\d{5}\z/,
68
67
  KW: /\A\d{5}\z/,
69
68
  LA: /\A\d{5}\z/,
70
69
  LB: /\A(\d{4}([ ]?\d{4})?)?\z/,
71
- LU: /\A(L\-)?\d{4}\z/,
70
+ LU: /\A(L[\- ]?)?\d{4}\z/,
72
71
  MK: /\A\d{4}\z/,
73
72
  MY: /\A\d{5}\z/,
74
73
  MV: /\A\d{5}\z/,
75
- MT: /\A[A-Z]{3}[ ]?\d{2,4}\z/,
76
- MU: /\A[ARar1-9]\d{4}\z/,
74
+ MT: /\A[A-Z]{3}[ ]?\d{2,4}\z/i,
75
+ MU: /\A[AR1-9]\d{4}\z/i,
77
76
  MX: /\A\d{5}\z/,
78
77
  MA: /\A\d{5}\z/,
79
78
  NZ: /\A\d{4}\z/,
80
79
  NI: /\A\d{5}\z/,
81
- NG: /\A(\d{6})?\z/,
82
- OM: /\A(PC )?\d{3}\z/,
80
+ NG: /\A\d{6}\z/,
81
+ OM: /\A(PC )?\d{3}\z/i,
83
82
  PK: /\A\d{5}\z/,
84
83
  PY: /\A\d{4}\z/,
85
84
  PH: /\A\d{4}\z/,
86
- PL: /\A\d{2}-\d{3}\z/,
85
+ PL: /\A\d{2}[ -]?\d{3}\z/,
87
86
  PR: /\A00[679]\d{2}([ \-]\d{4})?\z/,
88
87
  RO: /\A\d{6}\z/,
89
88
  RU: /\A\d{6}\z/,
@@ -111,13 +110,13 @@ module ValidatesZipcode
111
110
  YU: /\A\d{5}\z/,
112
111
  CX: /\A6798\z/,
113
112
  ET: /\A\d{4}\z/,
114
- FK: /\AFIQQ 1ZZ\z/,
113
+ FK: /\AFIQQ[ ]?1ZZ\z/i,
115
114
  NF: /\A2899\z/,
116
115
  FM: /\A(9694[1-4])([ \-]\d{4})?\z/,
117
116
  GF: /\A9[78]3\d{2}\z/,
118
117
  GP: /\A9[78][01]\d{2}\z/,
119
- GS: /\ASIQQ 1ZZ\z/,
120
- GU: /\A969[123]\d([ \-]\d{4})?\z/,
118
+ GS: /\ASIQQ[ ]?1ZZ\z/i,
119
+ GU: /\A969[1-3]\d([ \-]\d{4})?\z/,
121
120
  GW: /\A\d{4}\z/,
122
121
  HM: /\A\d{4}\z/,
123
122
  IQ: /\A\d{5}\z/,
@@ -133,117 +132,121 @@ module ValidatesZipcode
133
132
  PF: /\A987\d{2}\z/,
134
133
  PG: /\A\d{3}\z/,
135
134
  PM: /\A9[78]5\d{2}\z/,
136
- PN: /\APCRN 1ZZ\z/,
135
+ PN: /\APCRN[ ]?1ZZ\z/i,
137
136
  PW: /\A96940\z/,
138
- RE: /\A9[78]4\d{2}\z/,
139
- SH: /\A(ASCN|STHL) 1ZZ\z/,
137
+ RE: /\A974\d{2}\z/,
138
+ SH: /\A(ASCN|STHL|TDCU)[ ]?1ZZ\z/i,
140
139
  SJ: /\A\d{4}\z/,
141
- SZ: /\A[HLMS]\d{3}\z/,
142
- TC: /\ATKCA 1ZZ\z/,
140
+ SZ: /\A[HLMS]\d{3}\z/i,
141
+ TC: /\ATKCA[ ]?1ZZ\z/i,
143
142
  WF: /\A986\d{2}\z/,
144
143
  XK: /\A\d{5}\z/,
145
144
  YT: /\A976\d{2}\z/,
146
145
  # NOTE: UAE has no postal codes
147
146
  # https://github.com/dgilperez/validates_zipcode/issues/28
148
- # AE: /\A([a-zA-Z\d\s]){3,}\z/,
147
+ # AE: /\A([A-Z\d\s]){3,}\z/i,
149
148
  AF: /\A\d{4}\z/,
150
149
  AL: /\A\d{4}\z/,
151
- AG: /\A([a-zA-Z\d\s]){3,}\z/,
152
- AO: /\A([a-zA-Z\d\s]){3,}\z/,
153
- AZ: /\A([a-zA-Z\d\s]){3,}\z/,
154
- BF: /\A([a-zA-Z\d\s]){3,}\z/,
155
- BI: /\A([a-zA-Z\d\s]){3,}\z/,
156
- BS: /\A([a-zA-Z\d\s]){3,}\z/,
157
- BZ: /\A([a-zA-Z\d\s]){3,}\z/,
150
+ AG: /\A([A-Z\d\s]){3,}\z/i,
151
+ AO: /\A([A-Z\d\s]){3,}\z/i,
152
+ AZ: /\A(AZ[ ]?)?\d{4}\z/i,
153
+ BF: /\A([A-Z\d\s]){3,}\z/i,
154
+ BI: /\A([A-Z\d\s]){3,}\z/i,
155
+ BS: /\A([A-Z\d\s]){3,}\z/i,
156
+ BZ: /\A([A-Z\d\s]){3,}\z/i,
158
157
  BR: /\A\d{5}(-?\d{3})?\z/,
159
- BJ: /\A([a-zA-Z\d\s]){3,}\z/,
158
+ BJ: /\A([A-Z\d\s]){3,}\z/i,
160
159
  BT: /\A\d{5}\z/,
161
- BQ: /\A([a-zA-Z\d\s]){3,}\z/,
160
+ BQ: /\A([A-Z\d\s]){3,}\z/i,
162
161
  BO: /\A\d{4}\z/,
163
- BW: /\A([a-zA-Z\d\s]){3,}\z/,
164
- CF: /\A([a-zA-Z\d\s]){3,}\z/,
165
- CG: /\A([a-zA-Z\d\s]){3,}\z/,
166
- CI: /\A([a-zA-Z\d\s]){3,}\z/,
167
- CM: /\A([a-zA-Z\d]){3,7}\z/,
168
- CO: /\A([a-zA-Z\d\s]){3,}\z/,
162
+ BW: /\A([A-Z\d\s]){3,}\z/i,
163
+ CF: /\A([A-Z\d\s]){3,}\z/i,
164
+ CG: /\A([A-Z\d\s]){3,}\z/i,
165
+ CI: /\A([A-Z\d\s]){3,}\z/i,
166
+ # NOTE: Cameroon has no postal codes
167
+ # CM: /\A([A-Z\d]){3,7}\z/i,
168
+ CO: /\A([A-Z\d\s]){3,}\z/i,
169
169
  CR: /\A\d{5}\z/,
170
170
  CU: /\A\d{5}\z/,
171
- KM: /\A([a-zA-Z\d\s]){3,}\z/,
172
- DJ: /\A([a-zA-Z\d\s]){3,}\z/,
173
- DM: /\A([a-zA-Z\d\s]){3,}\z/,
174
- EG: /\A([a-zA-Z\d\s]){3,}\z/,
175
- GQ: /\A([a-zA-Z\d\s]){3,}\z/,
171
+ KM: /\A([A-Z\d\s]){3,}\z/i,
172
+ DJ: /\A([A-Z\d\s]){3,}\z/i,
173
+ DM: /\A([A-Z\d\s]){3,}\z/i,
174
+ EG: /\A([A-Z\d\s]){3,}\z/i,
175
+ GQ: /\A([A-Z\d\s]){3,}\z/i,
176
176
  EL: /\A\d{5}\z/,
177
- ER: /\A([a-zA-Z\d\s]){3,}\z/,
178
- FJ: /\A([a-zA-Z\d\s]){3,}\z/,
177
+ ER: /\A([A-Z\d\s]){3,}\z/i,
178
+ FJ: /\A([A-Z\d\s]){3,}\z/i,
179
179
  FR: /\A\d{5}\z/,
180
- GA: /\A\d{2}\z/,
181
- GD: /\A([a-zA-Z\d\s]){3,}\z/,
182
- GH: /\A([a-zA-Z\d\s]){3,}\z/,
183
- GM: /\A([a-zA-Z\d\s]){3,}\z/,
184
- GN: /\A([a-zA-Z\d\s]){3,}\z/,
185
- GI: /\A(GX11 1AA)\z/,
180
+ GA: /\A\d{4}\z/,
181
+ GD: /\A([A-Z\d\s]){3,}\z/i,
182
+ GH: /\A([A-Z\d\s]){3,}\z/i,
183
+ GM: /\A([A-Z\d\s]){3,}\z/i,
184
+ GN: /\A([A-Z\d\s]){3,}\z/i,
185
+ GI: /\A(GX11[ ]?1AA)\z/i,
186
186
  GR: /\A\d{3}[ ]?\d{2}\z/,
187
- GY: /\A([a-zA-Z\d\s]){3,}\z/,
188
- HN: /\A(([a-zA-Z]){2}|\d{2})\d{4}\z/,
187
+ GY: /\A([A-Z\d\s]){3,}\z/i,
188
+ HN: /\A(([A-Z]){2}|\d{2})\d{4}\z/i,
189
189
  IO: /\A\d{5}\z/,
190
190
  IR: /\A\d{5}\z/,
191
191
  JP: /\A\d{3}\-?\d{4}\z/,
192
- JM: /\A(JM)[A-Z]{3}\d{2}\z/,
193
- KI: /\A([a-zA-Z\d\s]){3,}\z/,
194
- KN: /\A([a-zA-Z\d\s]){3,8}\z/,
195
- KP: /\A([a-zA-Z\d\s]){3,8}\z/,
192
+ # Jamaica has no postcode system.However, for Kingston, there are one- and two-digit sector codes.
193
+ # On February 12, 2007 it was announced: "POST CODE PROJECT SUSPENDED INDEFINITELY"
194
+ # https://en.youbianku.com/Jamaica#:~:text=Jamaica%20has%20no%20postcode%20system,the%20name%20of%20the%20town.
195
+ JM: /\A((JM(DCN|CHR|AKN|DMR|BPD|AAW|CAN|ACE|DEH|CJS|BMY|BTS|CTY|DWD)(0[1-9]|[1-2]\d))|\d{1,2})?\z/i,
196
+ KI: /\AKI0[1-3]\d{2}\z/i,
197
+ KN: /\AKN[ ]?\d{4}\z/i,
198
+ KP: /\A([A-Z\d\s]){3,8}\z/i,
196
199
  LI: /\A\d{4}\z/,
197
- LV: /\A(LV)?\-?\d{4}\z/,
200
+ LV: /\A(LV[\- ]?)?\d{4}\z/i,
198
201
  LY: /\A\d{5}\z/,
199
- LT: /\A(LT-)?\d{5}\z/,
200
- LC: /\A([a-zA-Z\d\s]){3,}\z/,
202
+ LT: /\A(LT[\- ]?)?\d{5}\z/i,
203
+ LC: /\A([A-Z\d\s]){3,}\z/i,
201
204
  MC: /\A\d{5}\z/,
202
- MD: /\A(([a-zA-Z]){2})(|\s)\d{4}\z/,
203
- ME: /\A([a-zA-Z\d\s]){3,}\z/,
205
+ MD: /\A(([A-Z]){2})(|\s)\d{4}\z/i,
206
+ ME: /\A([A-Z\d\s]){3,}\z/i,
204
207
  MH: /\A\d{5}\z/,
205
- MR: /\A([a-zA-Z\d\s]){3,}\z/,
206
- MM: /\A([a-zA-Z\d\s]){3,}\z/,
207
- MW: /\A([a-zA-Z\d\s]){3,}\z/,
208
+ MR: /\A([A-Z\d\s]){3,}\z/i,
209
+ MM: /\A([A-Z\d\s]){3,}\z/i,
210
+ MW: /\A([A-Z\d\s]){3,}\z/i,
208
211
  MZ: /\A\d{4}\z/,
209
212
  NA: /\A\d{5}\z/,
210
213
  NP: /\A\d{6}\z/,
211
- NR: /\A([a-zA-Z\d\s]){3,}\z/,
214
+ NR: /\A([A-Z\d\s]){3,}\z/i,
212
215
  PT: /\A\d{4}([\-]\d{3})?\z/,
213
216
  PS: /\A\d{3}\z/,
214
217
  PA: /\A\d{4}\z/,
215
218
  PE: /\A\d{5}\z/,
216
- QA: /\A([a-zA-Z\d\s]){3,}\z/,
217
- RW: /\A([a-zA-Z\d\s]){3,}\z/,
218
- SC: /\A([a-zA-Z\d\s]){3,}\z/,
219
+ QA: /\A([A-Z\d\s]){3,}\z/i,
220
+ RW: /\A([A-Z\d\s]){3,}\z/i,
221
+ SC: /\A([A-Z\d\s]){3,}\z/i,
219
222
  SE: /\A\d{3}[ ]?\d{2}\z/,
220
223
  SK: /\A[089]\d{2}[ ]?\d{2}\z/,
221
- SL: /\A([a-zA-Z\d\s]){3,}\z/,
222
- SB: /\A([a-zA-Z\d\s]){3,}\z/,
223
- SR: /\A([a-zA-Z\d\s]){3,}\z/,
224
- SO: /\A([a-zA-Z\d\s]){3,}\z/,
225
- SV: /\A([a-zA-Z\d\s]){3,}\z/,
224
+ SL: /\A([A-Z\d\s]){3,}\z/i,
225
+ SB: /\A([A-Z\d\s]){3,}\z/i,
226
+ SR: /\A([A-Z\d\s]){3,}\z/i,
227
+ SO: /\A([A-Z\d\s]){3,}\z/i,
228
+ SV: /\A([A-Z\d\s]){3,}\z/i,
226
229
  SD: /\A\d{5}\z/,
227
- ST: /\A([a-zA-Z\d\s]){3,}\z/,
228
- SY: /\A([a-zA-Z\d\s]){3,}\z/,
230
+ ST: /\A([A-Z\d\s]){3,}\z/i,
231
+ SY: /\A([A-Z\d\s]){3,}\z/i,
229
232
  SS: /\A\d{5}\z/,
230
233
  TD: /\A\d{5}\z/,
231
- TG: /\A([a-zA-Z\d\s]){3,}\z/,
232
- TO: /\A([a-zA-Z\d\s]){3,}\z/,
233
- TZ: /\A([a-zA-Z\d\s]){3,}\z/,
234
+ TG: /\A([A-Z\d\s]){3,}\z/i,
235
+ TO: /\A([A-Z\d\s]){3,}\z/i,
236
+ TZ: /\A([A-Z\d\s]){3,}\z/i,
234
237
  TT: /\A\d{6}\z/,
235
238
  TW: /\A\d{3}(\d{2})?\z/,
236
- UG: /\A([a-zA-Z\d\s]){3,}\z/,
237
- UM: /\A([a-zA-Z\d\s]){3,}\z/,
238
- UY: /\A([a-zA-Z\d\s]){3,}\z/,
239
- VC: /\A(VC)\d{4}\z/,
239
+ UG: /\A([A-Z\d\s]){3,}\z/i,
240
+ UM: /\A([A-Z\d\s]){3,}\z/i,
241
+ UY: /\A([A-Z\d\s]){3,}\z/i,
242
+ VC: /\A(VC)\d{4}\z/i,
240
243
  VI: /\A\d{5}\z/,
241
- VG: /\A([a-zA-Z\d\s]){3,}\z/,
244
+ VG: /\A([A-Z\d\s]){3,}\z/i,
242
245
  VN: /\A\d{6}\z/,
243
- VU: /\A([a-zA-Z\d\s]){3,}\z/,
244
- WS: /\A([a-zA-Z\d\s]){3,}\z/,
245
- YE: /\A([a-zA-Z\d\s]){3,}\z/,
246
- ZW: /\A([a-zA-Z\d\s]){3,}\z/
246
+ VU: /\A([A-Z\d\s]){3,}\z/i,
247
+ WS: /\A([A-Z\d\s]){3,}\z/i,
248
+ YE: /\A([A-Z\d\s]){3,}\z/i,
249
+ ZW: /\A([A-Z\d\s]){3,}\z/i
247
250
  }.freeze
248
251
 
249
252
  def regexp_for_country_alpha2(alpha2)