Skip to content
This repository was archived by the owner on Oct 20, 2021. It is now read-only.

Commit 62ef013

Browse files
feat(rules): Added PostalCode rule
1 parent a929d65 commit 62ef013

5 files changed

Lines changed: 403 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ The library can be loaded either as a standalone script, or through an [AMD](htt
199199
- [Pis](docs/pis.md)
200200
- [Port](docs/port.md)
201201
- [Positive](docs/positive.md)
202+
- [PostalCode](docs/postal-code.md)
202203
- [PrimeNumber](docs/prime-number.md)
203204
- [Prnt](docs/prnt.md)
204205
- [PropertyKey](docs/property-key.md)

docs/postal-code.md

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# PostalCode
2+
3+
Validates if the given input is a postal code.
4+
5+
Valid values:
6+
7+
```js
8+
validator.postalCode('BR').validate('02179-000');
9+
validator.postalCode('GB').validate('GIR 0AA');
10+
validator.postalCode('US').validate('02179');
11+
validator.postalCode('PL').validate('99-300');
12+
```
13+
14+
Invalid values:
15+
16+
```js
17+
validator.postalCode('BR').validate('99-300');
18+
validator.postalCode('GB').validate('02179');
19+
validator.postalCode('US').validate('PR1 9LY');
20+
validator.postalCode('PL').validate('02179-000');
21+
```
22+
23+
The current supported brands are:
24+
25+
- AD
26+
- AM
27+
- AR
28+
- AT
29+
- AU
30+
- AX
31+
- AZ
32+
- BA
33+
- BB
34+
- BD
35+
- BE
36+
- BG
37+
- BH
38+
- BM
39+
- BN
40+
- BR
41+
- BY
42+
- CA
43+
- CH
44+
- CL
45+
- CN
46+
- CR
47+
- CS
48+
- CU
49+
- CV
50+
- CX
51+
- CY
52+
- CZ
53+
- DE
54+
- DK
55+
- DO
56+
- DZ
57+
- EC
58+
- EE
59+
- EG
60+
- ES
61+
- ET
62+
- FI
63+
- FM
64+
- FO
65+
- FR
66+
- GB
67+
- GE
68+
- GF
69+
- GG
70+
- GL
71+
- GP
72+
- GR
73+
- GT
74+
- GU
75+
- GW
76+
- HN
77+
- HR
78+
- HT
79+
- HU
80+
- ID
81+
- IL
82+
- IM
83+
- IN
84+
- IQ
85+
- IR
86+
- IS
87+
- IT
88+
- JE
89+
- JO
90+
- JP
91+
- KE
92+
- KG
93+
- KH
94+
- KP
95+
- KR
96+
- KW
97+
- KZ
98+
- LA
99+
- LB
100+
- LI
101+
- LK
102+
- LR
103+
- LS
104+
- LT
105+
- LU
106+
- LV
107+
- MA
108+
- MC
109+
- MD
110+
- ME
111+
- MG
112+
- MK
113+
- MM
114+
- MN
115+
- MQ
116+
- MT
117+
- MV
118+
- MX
119+
- MY
120+
- MZ
121+
- NC
122+
- NE
123+
- NF
124+
- NG
125+
- NI
126+
- NL
127+
- NO
128+
- NP
129+
- NZ
130+
- OM
131+
- PF
132+
- PG
133+
- PH
134+
- PK
135+
- PL
136+
- PM
137+
- PR
138+
- PT
139+
- PW
140+
- PY
141+
- RE
142+
- RO
143+
- RS
144+
- RU
145+
- SA
146+
- SD
147+
- SE
148+
- SG
149+
- SH
150+
- SI
151+
- SK
152+
- SM
153+
- SN
154+
- SO
155+
- SV
156+
- SZ
157+
- TC
158+
- TH
159+
- TJ
160+
- TM
161+
- TN
162+
- TR
163+
- TW
164+
- UA
165+
- US
166+
- UY
167+
- UZ
168+
- VA
169+
- VE
170+
- VI
171+
- VN
172+
- WF
173+
- YT
174+
- ZA
175+
- ZM

src/rules/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export * from './phone';
117117
export * from './pis';
118118
export * from './port';
119119
export * from './positive';
120+
export * from './postal-code';
120121
export * from './prime-number';
121122
export * from './prnt';
122123
export * from './property-key';

src/rules/postal-code.ts

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
import { AbstractServiceRegex } from './abstract-service-regex';
2+
3+
export class PostalCode extends AbstractServiceRegex {
4+
5+
/**
6+
* Services.
7+
*/
8+
protected get services(): Map<string, RegExp> {
9+
/* tslint:disable max-line-length */
10+
return new Map([
11+
['AD', /^(?:AD)*(\d{3})$/],
12+
['AM', /^(\d{6})$/],
13+
['AR', /^([A-Z]\d{4}[A-Z]{3})$/],
14+
['AT', /^(\d{4})$/],
15+
['AU', /^(\d{4})$/],
16+
['AX', /^(?:FI)*(\d{5})$/],
17+
['AZ', /^(?:AZ)*(\d{4})$/],
18+
['BA', /^(\d{5})$/],
19+
['BB', /^(?:BB)*(\d{5})$/],
20+
['BD', /^(\d{4})$/],
21+
['BE', /^(\d{4})$/],
22+
['BG', /^(\d{4})$/],
23+
['BH', /^(\d{3}\d?)$/],
24+
['BM', /^([A-Z]{2}\d{2})$/],
25+
['BN', /^([A-Z]{2}\d{4})$/],
26+
['BR', /^(\d{8}|\d{5}-\d{3})$/],
27+
['BY', /^(\d{6})$/],
28+
['CA', /^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]) ?(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$/],
29+
['CH', /^(\d{4})$/],
30+
['CL', /^(\d{7})$/],
31+
['CN', /^(\d{6})$/],
32+
['CR', /^(\d{4})$/],
33+
['CS', /^((\d{5})|(\d{3}\040\d{2}))$/],
34+
['CU', /^(?:CP)*(\d{5})$/],
35+
['CV', /^(\d{4})$/],
36+
['CX', /^(\d{4})$/],
37+
['CY', /^(\d{4})$/],
38+
['CZ', /^(\d{5})$/],
39+
['DE', /^(\d{5})$/],
40+
['DK', /^(\d{4})$/],
41+
['DO', /^(\d{5})$/],
42+
['DZ', /^(\d{5})$/],
43+
['EC', /^([a-zA-Z]\d{4}[a-zA-Z])$/],
44+
['EE', /^(\d{5})$/],
45+
['EG', /^(\d{5})$/],
46+
['ES', /^(\d{5})$/],
47+
['ET', /^(\d{4})$/],
48+
['FI', /^(?:FI)*(\d{5})$/],
49+
['FM', /^(\d{5})$/],
50+
['FO', /^(?:FO)*(\d{3})$/],
51+
['FR', /^(\d{5})$/],
52+
['GB', /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$/],
53+
['GE', /^(\d{4})$/],
54+
['GF', /^((97|98)3\d{2})$/],
55+
['GG', /^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$/],
56+
['GL', /^(\d{4})$/],
57+
['GP', /^((97|98)\d{3})$/],
58+
['GR', /^(\d{5})$/],
59+
['GT', /^(\d{5})$/],
60+
['GU', /^(969\d{2})$/],
61+
['GW', /^(\d{4})$/],
62+
['HN', /^([A-Z]{2}\d{4})$/],
63+
['HR', /^(?:HR)*(\d{5})$/],
64+
['HT', /^(?:HT)*(\d{4})$/],
65+
['HU', /^(\d{4})$/],
66+
['ID', /^(\d{5})$/],
67+
['IL', /^(\d{5})$/],
68+
['IM', /^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$/],
69+
['IN', /^(\d{6})$/],
70+
['IQ', /^(\d{5})$/],
71+
['IR', /^(\d{10})$/],
72+
['IS', /^(\d{3})$/],
73+
['IT', /^(\d{5})$/],
74+
['JE', /^(([A-Z]\d{2}[A-Z]{2})|([A-Z]\d{3}[A-Z]{2})|([A-Z]{2}\d{2}[A-Z]{2})|([A-Z]{2}\d{3}[A-Z]{2})|([A-Z]\d[A-Z]\d[A-Z]{2})|([A-Z]{2}\d[A-Z]\d[A-Z]{2})|(GIR0AA))$/],
75+
['JO', /^(\d{5})$/],
76+
['JP', /^(\d{7})$/],
77+
['KE', /^(\d{5})$/],
78+
['KG', /^(\d{6})$/],
79+
['KH', /^(\d{5})$/],
80+
['KP', /^(\d{6})$/],
81+
['KR', /^(?:SEOUL)*(\d{6})$/],
82+
['KW', /^(\d{5})$/],
83+
['KZ', /^(\d{6})$/],
84+
['LA', /^(\d{5})$/],
85+
['LB', /^(\d{4}(\d{4})?)$/],
86+
['LI', /^(\d{4})$/],
87+
['LK', /^(\d{5})$/],
88+
['LR', /^(\d{4})$/],
89+
['LS', /^(\d{3})$/],
90+
['LT', /^(?:LT)*(\d{5})$/],
91+
['LU', /^(\d{4})$/],
92+
['LV', /^(?:LV)*(\d{4})$/],
93+
['MA', /^(\d{5})$/],
94+
['MC', /^(\d{5})$/],
95+
['MD', /^(?:MD)*(\d{4})$/],
96+
['ME', /^(\d{5})$/],
97+
['MG', /^(\d{3})$/],
98+
['MK', /^(\d{4})$/],
99+
['MM', /^(\d{5})$/],
100+
['MN', /^(\d{6})$/],
101+
['MQ', /^(\d{5})$/],
102+
['MT', /^([A-Z]{3}\d{2}\d?)$/],
103+
['MV', /^(\d{5})$/],
104+
['MX', /^(\d{5})$/],
105+
['MY', /^(\d{5})$/],
106+
['MZ', /^(\d{4})$/],
107+
['NC', /^(\d{5})$/],
108+
['NE', /^(\d{4})$/],
109+
['NF', /^(\d{4})$/],
110+
['NG', /^(\d{6})$/],
111+
['NI', /^(\d{7})$/],
112+
['NL', /^(\d{4}[A-Z]{2})$/],
113+
['NO', /^(\d{4})$/],
114+
['NP', /^(\d{5})$/],
115+
['NZ', /^(\d{4})$/],
116+
['OM', /^(\d{3})$/],
117+
['PF', /^((97|98)7\d{2})$/],
118+
['PG', /^(\d{3})$/],
119+
['PH', /^(\d{4})$/],
120+
['PK', /^(\d{5})$/],
121+
['PL', /^(\d{2}-\d{3})$/],
122+
['PM', /^(97500)$/],
123+
['PR', /^(\d{9})$/],
124+
['PT', /^(\d{7})$/],
125+
['PW', /^(96940)$/],
126+
['PY', /^(\d{4})$/],
127+
['RE', /^((97|98)(4|7|8)\d{2})$/],
128+
['RO', /^(\d{6})$/],
129+
['RS', /^(\d{6})$/],
130+
['RU', /^(\d{6})$/],
131+
['SA', /^(\d{5})$/],
132+
['SD', /^(\d{5})$/],
133+
['SE', /^(?:SE)*(\d{5})$/],
134+
['SG', /^(\d{6})$/],
135+
['SH', /^(STHL1ZZ)$/],
136+
['SI', /^(?:SI)*(\d{4})$/],
137+
['SK', /^((\d{5})|(\d{3}\040\d{2}))$/],
138+
['SM', /^(4789\d)$/],
139+
['SN', /^(\d{5})$/],
140+
['SO', /^([A-Z]{2}\d{5})$/],
141+
['SV', /^(?:CP)*(\d{4})$/],
142+
['SZ', /^([A-Z]\d{3})$/],
143+
['TC', /^(TKCA 1ZZ)$/],
144+
['TH', /^(\d{5})$/],
145+
['TJ', /^(\d{6})$/],
146+
['TM', /^(\d{6})$/],
147+
['TN', /^(\d{4})$/],
148+
['TR', /^(\d{5})$/],
149+
['TW', /^(\d{5})$/],
150+
['UA', /^(\d{5})$/],
151+
['US', /^\d{5}(-\d{4})?$/],
152+
['UY', /^(\d{5})$/],
153+
['UZ', /^(\d{6})$/],
154+
['VA', /^(\d{5})$/],
155+
['VE', /^(\d{4})$/],
156+
['VI', /^\d{5}(-\d{4})?$/],
157+
['VN', /^(\d{6})$/],
158+
['WF', /^(986\d{2})$/],
159+
['YT', /^(\d{5})$/],
160+
['ZA', /^(\d{4})$/],
161+
['ZM', /^(\d{5})$/]
162+
]);
163+
/* tslint:enable max-line-length */
164+
}
165+
}
166+
167+
export default PostalCode;

0 commit comments

Comments
 (0)