Last active
October 14, 2020 10:01
-
-
Save Gyvastis/feb3f0a97494258928a601dab2b0ab7c to your computer and use it in GitHub Desktop.
Global ZipCode regexes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package helpers | |
import ( | |
"errors" | |
"fmt" | |
"regexp" | |
) | |
type ZipCode struct{} | |
var zipCodeRegexes = map[string]string{ | |
"AC": "^(ASCN 1ZZ)$", | |
"AD": "^(?:AD)*(\\d{3})$", | |
"AE": "", | |
"AF": "^(\\d{4})$", | |
"AG": "^(\\d{5})$", | |
"AI": "^(AI-2640)$", | |
"AL": "^(\\d{4})$", | |
"AM": "^(\\d{4})$", | |
"AN": "", | |
"AO": "", | |
"AQ": "^(7151)$", | |
"AR": "^([A-Z]\\d{4}[A-Z]{3})|([A-Z]?\\d{4})$", | |
"AS": "^(\\d{5})$", | |
"AT": "^(\\d{4})$", | |
"AU": "^(\\d{4})$", | |
"AW": "^(0000 AW)$", | |
"AX": "^(\\d{5})$", | |
"AZ": "^(AZ) (\\d{4})$", | |
"BA": "^(\\d{5})$", | |
"BB": "^(?:BB)*(\\d{5})$", | |
"BD": "^(\\d{4})$", | |
"BE": "^(\\d{4})$", | |
"BF": "", | |
"BG": "^(\\d{4})$", | |
"BH": "^(\\d{3}\\d?)$", | |
"BI": "", | |
"BJ": "", | |
"BL": "^(\\d{5})$", | |
"BM": "^([A-Z]{2} \\d{2})$", | |
"BN": "^([A-Z]{2}\\d{4})$", | |
"BO": "", | |
"BQ": "^(0000 BQ)$", | |
"BR": "^[0-9]{5}-[0-9]{3}$", | |
"BS": "", | |
"BT": "^(\\d{5})$", | |
"BV": "", | |
"BW": "", | |
"BY": "^(\\d{6})$", | |
"BZ": "", | |
"CA": "^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] +?[0-9][A-Z][0-9]$", | |
"CC": "^(6799 W3)$", | |
"CD": "", | |
"CF": "", | |
"CG": "", | |
"CH": "^(\\d{4})$", | |
"CI": "", | |
"CK": "", | |
"CL": "^(\\d{7})$", | |
"CM": "", | |
"CN": "^(\\d{6})$", | |
"CO": "^(\\d{6})$", | |
"CR": "^(\\d{5})$", | |
"CU": "^(?:CP)*(\\d{5})$", | |
"CV": "^(\\d{4})$", | |
"CW": "^(0000 CW)$", | |
"CX": "^(6978)$", | |
"CY": "^(\\d{4})$", | |
"CZ": "^[0-9]{3} [0-9]{2}$", | |
"DE": "^(\\d{5})$", | |
"DJ": "", | |
"DK": "^(\\d{4})$", | |
"DM": "", | |
"DO": "^(\\d{5})$", | |
"DZ": "^(\\d{5})$", | |
"EC": "^(\\d{6})$", | |
"EE": "^(\\d{5})$", | |
"EG": "^(\\d{5})$", | |
"EH": "^(\\d{5})$", | |
"ER": "", | |
"ES": "^(\\d{5})$", | |
"ET": "^(\\d{4})$", | |
"FI": "^(?:FI)*(\\d{5})$", | |
"FJ": "", | |
"FK": "^(FIQQ 1ZZ)$", | |
"FM": "^(\\d{5})$", | |
"FO": "^(?:FO)*(\\d{3})$", | |
"FR": "^(\\d{5})$", | |
"GA": "", | |
"GB": "^(((([A-PR-UWYZ][0-9][0-9A-HJKS-UW]?)|([A-PR-UWYZ][A-HK-Y][0-9][0-9ABEHMNPRV-Y]?))\\s{0,2}[0-9]([ABD-HJLNP-UW-Z]{2}))|(GIR\\s{0,2}0AA))$", | |
"GD": "", | |
"GE": "^(\\d{4})$", | |
"GF": "^((973)\\d{2})$", | |
"GG": "((GY)([0-9][0-9A-HJKPS-UW]?|[A-HK-Y][0-9][0-9ABEHMNPRV-Y]?) [0-9][ABD-HJLNP-UW-Z]{2})", | |
"GH": "", | |
"GI": "^(GX11 1AA)$", | |
"GL": "^(\\d{4})$", | |
"GM": "", | |
"GN": "^(\\d{3})$", | |
"GP": "^((971)[0-9][0-0])$", | |
"GQ": "", | |
"GR": "^(\\d{3}) \\d{2}$", | |
"GS": "^(SIQQ 1ZZ)$", | |
"GT": "^(\\d{5})$", | |
"GU": "^((969)[1-3][0-2])$", | |
"GW": "^(\\d{4})$", | |
"GY": "", | |
"HK": "^(999077)$", | |
"HM": "^(7151)$", | |
"HN": "^(\\d{5})$", | |
"HR": "^(?:HR)*(\\d{5})$", | |
"HT": "^(?:HT)*(\\d{4})$", | |
"HU": "^(\\d{4})$", | |
"ID": "^(\\d{5})$", | |
"IE": "^[A-NP-Z\\d]{3}\\s[A-NP-Z\\d]{4}", | |
"IL": "^(\\d{5})$", | |
"IM": "((IM)([0-9][0-9A-HJKPS-UW]?|[A-HK-Y][0-9][0-9ABEHMNPRV-Y]?) [0-9][ABD-HJLNP-UW-Z]{2})", | |
"IN": "^(\\d{6})$", | |
"IO": "^(BB9D 1ZZ)$", | |
"IQ": "^(\\d{5})$", | |
"IR": "^\\d{5}([\\-]\\d{5})?$", | |
"IS": "^(\\d{3})$", | |
"IT": "^(\\d{5})$", | |
"JE": "(JE)([0-9]\\d{1})", | |
"JM": "^((JM)[A-Z]{3,3}\\d{2,2})$", | |
"JO": "^(\\d{5})$", | |
"JP": "^(\\d{3}-\\d{4})$", | |
"KE": "^(\\d{5})$", | |
"KG": "^(\\d{6})$", | |
"KH": "^(\\d{5})$", | |
"KI": "", | |
"KM": "", | |
"KN": "", | |
"KP": "", | |
"KR": "^(\\d{3}[-]\\d{3})$", | |
"KW": "^(\\d{5})$", | |
"KY": "^[K][Y][0-9]{1}[-]([0-9]){4}$", | |
"KZ": "^(\\d{6})$", | |
"LA": "^(\\d{5})$", | |
"LB": "^(\\d{4}(\\d{4})?)$", | |
"LC": "", | |
"LI": "^(\\d{4})$", | |
"LK": "^(\\d{5})$", | |
"LR": "^(\\d{4})$", | |
"LS": "^(\\d{3})$", | |
"LT": "^(?:LT)*(\\d{5})$", | |
"LU": "^(\\d{4})$", | |
"LV": "^[L]{1}[V]{1}[-]([0-9]){4}$", | |
"LY": "^(\\d{5})$", | |
"MA": "^(\\d{5})$", | |
"MC": "^(\\d{5})$", | |
"MD": "^(?:MD)*(\\d{4})$", | |
"ME": "^(\\d{5})$", | |
"MF": "^(\\d{5})$", | |
"MG": "^(\\d{3})$", | |
"MH": "^((969)[6-7][0-9])$", | |
"MK": "^(\\d{4})$", | |
"ML": "", | |
"MM": "^(\\d{5})$", | |
"MN": "^(\\d{5})$", | |
"MO": "", | |
"MP": "^(\\d{5})$", | |
"MQ": "^(\\d{5})$", | |
"MR": "", | |
"MS": "", | |
"MT": "^[A-Z]{3} [0-9]{4}$", | |
"MU": "^([0-9A-Z]\\d{4})$", | |
"MV": "^(\\d{5})$", | |
"MW": "", | |
"MX": "^(\\d{5})$", | |
"MY": "^(\\d{5})$", | |
"MZ": "^(\\d{4})$", | |
"NA": "", | |
"NC": "^(\\d{5})$", | |
"NE": "^(\\d{4})$", | |
"NF": "^(2899)$", | |
"NG": "^(\\d{6})$", | |
"NI": "^(\\d{5})$", | |
"NL": "[0-9]{4} ?[A-Z]{2}", | |
"NO": "^(\\d{4})$", | |
"NP": "^(\\d{5})$", | |
"NR": "", | |
"NU": "", | |
"NZ": "^(\\d{4})$", | |
"OM": "^(\\d{3})$", | |
"PA": "", | |
"PE": "^(\\d{5})$", | |
"PF": "^((987)\\d{2})$", | |
"PG": "^(\\d{3})$", | |
"PH": "^(\\d{4})$", | |
"PK": "^(\\d{5})$", | |
"PL": "^[0-9]{2}[-]([0-9]){3}$", | |
"PM": "^(\\d{5})$", | |
"PN": "^(PCR9 1ZZ)$", | |
"PR": "^\\d{5}((-|\\s)?\\d{4})?$", | |
"PS": "^(\\d{5})$", | |
"PT": "^\\d{4}((-|\\s)?\\d{3})?$", | |
"PW": "^(96940)$", | |
"PY": "^(\\d{4})$", | |
"QA": "", | |
"RE": "[9]{1}[7|8][4|7|8]\\d{2}", | |
"RO": "^(\\d{6})$", | |
"RS": "^(\\d{5})$", | |
"RU": "^(\\d{6})$", | |
"RW": "", | |
"SA": "^(\\d{5})$", | |
"SB": "", | |
"SC": "", | |
"SD": "^(\\d{5})$", | |
"SE": "^(\\d{3} \\d{2})$", | |
"SG": "^(\\d{6})$", | |
"SH": "^[A-Z]{4} (1ZZ)$", | |
"SI": "^(\\d{4})$", | |
"SJ": "^(\\d{4})$", | |
"SK": "^(\\d{3} \\d{2})$", | |
"SL": "", | |
"SM": "^(4789\\d)$", | |
"SN": "^(\\d{5})$", | |
"SO": "", | |
"SR": "", | |
"SS": "^(\\d{5})$", | |
"ST": "", | |
"SV": "^(01101)$", | |
"SX": "^(0000 AA)$", | |
"SY": "", | |
"SZ": "^([A-Z]\\d{3})$", | |
"TC": "^(TKCA 1ZZ)$", | |
"TD": "^(\\d{5})$", | |
"TF": "^((984)\\d{2})$", | |
"TG": "", | |
"TH": "^(\\d{5})$", | |
"TJ": "^(\\d{3})$", | |
"TK": "", | |
"TL": "", | |
"TM": "^(\\d{6})$", | |
"TN": "^(\\d{4})$", | |
"TO": "", | |
"TR": "^(\\d{5})$", | |
"TT": "", | |
"TV": "", | |
"TW": "^(\\d{3} \\d{2})|(\\d{3})$", | |
"TZ": "", | |
"UA": "^(\\d{5})$", | |
"UG": "", | |
"US": "^\\d{5}([\\-]\\d{4})?$", | |
"UY": "^(\\d{5})$", | |
"UZ": "^(\\d{6})$", | |
"VA": "", | |
"VC": "(VC)(\\d{4})", | |
"VE": "^(\\d{4})$", | |
"VG": "^(VG11)[0-6][0]$", | |
"VI": "^(\\d{5})$", | |
"VN": "^(\\d{6})$", | |
"VU": "", | |
"WF": "", | |
"WS": "", | |
"XK": "", | |
"YE": "", | |
"YT": "^(\\d{5})$", | |
"ZA": "^(\\d{4})$", | |
"ZM": "^(\\d{5})$", | |
"ZW": "", | |
} | |
func (z ZipCode) GetRegex(countryCode string) (zipCodeRegex string) { | |
if zipCodeRegex, ok := zipCodeRegexes[countryCode]; ok { | |
return zipCodeRegex | |
} | |
return "" | |
} | |
func (z ZipCode) IsValid(countryCode string, zipCode string) (err error) { | |
zipCodeRegex := z.GetRegex(countryCode) | |
if zipCodeRegex == "" { | |
return errors.New(fmt.Sprintf("undefined zipcode regex for `%s`.", countryCode)) | |
} | |
if matched, _ := regexp.MatchString(zipCodeRegex, zipCode); !matched { | |
return errors.New(fmt.Sprintf("invalid zipcode `%s` for regex `%s`.", zipCode, zipCodeRegex)) | |
} | |
return nil | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment