Coverage for /home/runner/work/viur-core/viur-core/viur/src/viur/core/data/zip_patterns.py: 100%
2 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-25 15:02 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-25 15:02 +0000
1ZIP_CODE_PATTERNS = {
2 "ac": r"^[Aa][Ss][Cc][Nn]\s{0,1}[1][Zz][Zz]$",
3 "ad": r"^[Aa][Dd]\d{3}$",
4 "ae": r"",
5 "af": r"^\d{4}$",
6 "ag": r"",
7 "ai": r"^[Aa][I][-][2][6][4][0]$",
8 "al": r"^\d{4}$",
9 "am": r"^\d{4}$",
10 "ao": r"",
11 "ar": r"^\d{4}|[A-Za-z]\d{4}[a-zA-Z]{3}$",
12 "as": r"^\d{5}(-{1}\d{4,6})$",
13 "at": r"^\d{4}$",
14 "au": r"^\d{4}$",
15 "aw": r"",
16 "ax": r"^\d{5}$",
17 "az": r"^[Aa][Zz]\d{4}$",
18 "ba": r"^\d{5}$",
19 "bb": r"^[Aa][Zz]\d{5}$",
20 "bd": r"^\d{4}$",
21 "be": r"^\d{4}$",
22 "bf": r"",
23 "bg": r"^\d{4}$",
24 "bh": r"^\d{3,4}$",
25 "bi": r"",
26 "bj": r"",
27 "bl": r"^97133$",
28 "bm": r"^[A-Za-z]{2}\s([A-Za-z]{2}|\d{2})$",
29 "bn": r"^[A-Za-z]{2}\d{4}$",
30 "bo": r"^\d{4}$",
31 "bq": r"",
32 "br": r"^\d{5}-\d{3}$",
33 "bs": r"",
34 "bt": r"^\d{5}$",
35 "bw": r"",
36 "by": r"^\d{6}$",
37 "bz": r"",
38 "ca": r"^([A-CEGHJ-NPR-TVWXYZaeghj-npr-tvwxyz]\d){2}\s?\d[A-CEGHJ-NPR-TVWXYZaeghj-npr-tvwxyz]\d$",
39 "cc": r"^\d{4}$",
40 "cd": r"^[Cc][Dd]$",
41 "cf": r"",
42 "cg": r"",
43 "ch": r"^\d{4}$",
44 "ci": r"",
45 "ck": r"",
46 "cl": r"^\d{7}\s\(\d{3}-\d{4}\)$",
47 "cm": r"",
48 "cn": r"^\d{6}$",
49 "co": r"^\d{6}$",
50 "cr": r"^\d{4,5}$",
51 "cu": r"^\d{5}$",
52 "cv": r"^\d{4}$",
53 "cw": r"",
54 "cx": r"^\d{4}$",
55 "cy": r"^\d{4}$",
56 "cz": r"^\d{5}\s\(\d{3}\s\d{2}\)$",
57 "de": r"^\d{5}$",
58 "dj": r"",
59 "dk": r"^\d{4}$",
60 "dm": r"",
61 "do": r"^\d{5}$",
62 "dz": r"^\d{5}$",
63 "ec": r"^\d{6}$",
64 "ee": r"^\d{5}$",
65 "eg": r"^\d{5}$",
66 "er": r"",
67 "es": r"^\d{5}$",
68 "et": r"^\d{4}$",
69 "fi": r"^\d{5}$",
70 "fj": r"",
71 "fk": r"^[Ff][Ii][Qq]{2}\s{0,1}[1][Zz]{2}$",
72 "fm": r"^\d{5}(-{1}\d{4})$",
73 "fo": r"^\d{3}$",
74 "fr": r"^\d{5}$",
75 "ga": r"^\d{2}\s[a-zA-Z-_ ]\s\d{2}$",
76 "gb": r"^[A-Z]{1,2}[0-9R][0-9A-Z]?\s*[0-9][A-JLNP-Z]{2}$",
77 "gd": r"",
78 "ge": r"^\d{4}$",
79 "gf": r"^973\d{2}$",
80 "gg": r"^[A-Za-z]{2}\d\s{0,1}\d[A-Za-z]{2}$",
81 "gh": r"",
82 "gi": r"^[Gg][Xx][1]{2}\s{0,1}[1][Aa]{2}$",
83 "gl": r"^\d{4}$",
84 "gm": r"",
85 "gn": r"",
86 "gp": r"^971\d{2}$",
87 "gq": r"",
88 "gr": r"^\d{3}\s{0,1}\d{2}$",
89 "gs": r"^[Ss][Ii][Qq]{2}\s{0,1}[1][Zz]{2}$",
90 "gt": r"^\d{5}$",
91 "gu": r"^\d{5}$",
92 "gw": r"^\d{4}$",
93 "gy": r"",
94 "hk": r"",
95 "hm": r"^\d{4}$",
96 "hn": r"^\d{5}$",
97 "hr": r"^\d{5}$",
98 "ht": r"^\d{4}$",
99 "hu": r"^\d{4}$",
100 "id": r"^\d{5}$",
101 "ie": r"",
102 "il": r"^\b\d{5}(\d{2})?$",
103 "im": r"^[Ii][Mm]\d{1,2}\s\d[A-Z]{2}$",
104 "in": r"^\d{6}$",
105 "io": r"^[Bb]{2}[Nn][Dd]\s{0,1}[1][Zz]{2}$",
106 "iq": r"^\d{5}$",
107 "ir": r"^\d{5}-\d{5}$",
108 "is": r"^\d{3}$",
109 "it": r"^\d{5}$",
110 "je": r"^[Jj][Ee]\d\s{0,1}\d[A-Za-z]{2}$",
111 "jm": r"^\d{2}$",
112 "jo": r"^\d{5}$",
113 "jp": r"^\d{7}\s\(\d{3}-\d{4}\)$",
114 "ke": r"^\d{5}$",
115 "kg": r"^\d{6}$",
116 "kh": r"^\d{5}$",
117 "ki": r"",
118 "km": r"",
119 "kn": r"",
120 "kp": r"",
121 "kr": r"^\d{6}\s\(\d{3}-\d{3}\)$",
122 "kw": r"^\d{5}$",
123 "ky": r"^[Kk][Yy]\d[-\s]{0,1}\d{4}$",
124 "kz": r"^\d{6}$",
125 "la": r"^\d{5}$",
126 "lb": r"^\d{4}\s{0,1}\d{4}$",
127 "lc": r"",
128 "li": r"^\d{4}$",
129 "lk": r"^\d{5}$",
130 "lr": r"^\d{4}$",
131 "ls": r"^\d{3}$",
132 "lt": r"^[Ll][Tt][- ]{0,1}\d{5}$",
133 "lu": r"^\d{4}$",
134 "lv": r"^[Ll][Vv][- ]{0,1}\d{4}$",
135 "ly": r"^\d{5}$",
136 "ma": r"^\d{5}$",
137 "mc": r"^980\d{2}$",
138 "md": r"^[Mm][Dd][- ]{0,1}\d{4}$",
139 "me": r"^\d{5}$",
140 "mf": r"^97150$",
141 "mg": r"^\d{3}$",
142 "mh": r"^\d{5}$",
143 "mk": r"^\d{4}$",
144 "ml": r"",
145 "mm": r"^\d{5}$",
146 "mn": r"^\d{5}$",
147 "mo": r"",
148 "mp": r"^\d{5}$",
149 "mq": r"^972\d{2}$",
150 "mr": r"",
151 "ms": r"^[Mm][Ss][Rr]\s{0,1}\d{4}$",
152 "mt": r"^[A-Za-z]{3}\s{0,1}\d{4}$",
153 "mu": r"",
154 "mv": r"^\d{4,5}$",
155 "mw": r"",
156 "mx": r"^\d{5}$",
157 "my": r"^\d{5}$",
158 "mz": r"^\d{4}$",
159 "na": r"^\d{5}$",
160 "nc": r"^988\d{2}$",
161 "ne": r"^\d{4}$",
162 "nf": r"^\d{4}$",
163 "ng": r"^\d{6}$",
164 "ni": r"^\d{5}$",
165 "nl": r"^\d{4}\s{0,1}[A-Za-z]{2}$",
166 "no": r"^\d{4}$",
167 "np": r"^\d{5}$",
168 "nr": r"",
169 "nu": r"",
170 "nz": r"^\d{4}$",
171 "om": r"^\d{3}$",
172 "pa": r"^\d{6}$",
173 "pe": r"^\d{5}$",
174 "pf": r"^987\d{2}$",
175 "pg": r"^\d{3}$",
176 "ph": r"^\d{4}$",
177 "pk": r"^\d{5}$",
178 "pl": r"^\d{2}[- ]{0,1}\d{3}$",
179 "pm": r"^97500$",
180 "pn": r"^[Pp][Cc][Rr][Nn]\s{0,1}[1][Zz]{2}$",
181 "pr": r"^\d{5}$",
182 "pt": r"^\d{4}[- ]{0,1}\d{3}$",
183 "pw": r"^\d{5}$",
184 "py": r"^\d{4}$",
185 "qa": r"",
186 "re": r"^974\d{2}$",
187 "ro": r"^\d{6}$",
188 "rs": r"^\d{5}$",
189 "ru": r"^\d{6}$",
190 "sa": r"^\d{5}(-{1}\d{4})?$",
191 "sb": r"",
192 "sc": r"",
193 "sd": r"^\d{5}$",
194 "se": r"^\d{3}\s*\d{2}$",
195 "sg": r"^\d{6}$",
196 "sh": r"^[Ss][Tt][Hh][Ll]\s{0,1}[1][Zz]{2}$",
197 "si": r"^([Ss][Ii][- ]{0,1}){0,1}\d{4}$",
198 "sj": r"^\d{4}$",
199 "sk": r"^\d{5}\s\(\d{3}\s\d{2}\)$",
200 "sl": r"",
201 "sm": r"^4789\d$",
202 "sn": r"",
203 "so": r"",
204 "sr": r"",
205 "st": r"",
206 "sv": r"^1101$",
207 "sx": r"",
208 "sy": r"",
209 "sz": r"^[A-Za-z]\d{3}$",
210 "tc": r"^[Tt][Kk][Cc][Aa]\s{0,1}[1][Zz]{2}$",
211 "td": r"^\d{5}$",
212 "tf": r"",
213 "tg": r"",
214 "th": r"^\d{5}$",
215 "tj": r"^\d{6}$",
216 "tk": r"",
217 "tl": r"",
218 "tm": r"^\d{6}$",
219 "tn": r"^\d{4}$",
220 "to": r"",
221 "tr": r"^\d{5}$",
222 "tt": r"^\d{6}$",
223 "tv": r"",
224 "tw": r"^\d{5}$",
225 "tz": r"",
226 "ua": r"^\d{5}$",
227 "ug": r"",
228 "us": r"^\b\d{5}\b(?:[- ]{1}\d{4})?$",
229 "uy": r"^\d{5}$",
230 "uz": r"^\d{3} \d{3}$",
231 "va": r"^120$",
232 "vc": r"^[Vv][Cc]\d{4}$",
233 "ve": r"^\d{4}(\s[a-zA-Z]{1})?$",
234 "vg": r"^[Vv][Gg]\d{4}$",
235 "vi": r"^\d{5}$",
236 "vn": r"^\d{6}$",
237 "vu": r"",
238 "wf": r"^986\d{2}$",
239 "xk": r"^\d{5}$",
240 "ye": r"",
241 "yt": r"^976\d{2}$",
242 "za": r"^\d{4}$",
243 "zm": r"^\d{5}$",
244 "zw": r"",
245}
246"""Provides regular expressions for validating international postal codes.
248This module contains a single dictionary, `ZIP_CODE_PATTERNS`, which maps
249two-letter ISO 3166-1 alpha-2 country codes to their corresponding
250raw regex string patterns.
252Empty strings (e.g., for "ae") indicate that no specific pattern is
253available or used for that country.
255The patterns are based on the Gist by jamesbar2:
256https://gist.github.com/jamesbar2/1c677c22df8f21e869cca7e439fc3f5b
257"""