Skip to content

Instantly share code, notes, and snippets.

@laser
Last active June 10, 2018 22:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save laser/8fb1ca7d4c91a4e4fca5e22fa7a986a5 to your computer and use it in GitHub Desktop.
Save laser/8fb1ca7d4c91a4e4fca5e22fa7a986a5 to your computer and use it in GitHub Desktop.
postal code regular expressions
var codes = {
"AD": "AD\\d{3}",
"AM": "(37)?\\d{4}",
"AR": "([A-HJ-NP-Z])?\\d{4}([A-Z]{3})?",
"AS": "96799",
"AT": "\\d{4}",
"AU": "\\d{4}",
"AX": "22\\d{3}",
"AZ": "\\d{4}",
"BA": "\\d{5}",
"BB": "(BB\\d{5})?",
"BD": "\\d{4}",
"BE": "\\d{4}",
"BG": "\\d{4}",
"BH": "((1[0-2]|[2-9])\\d{2})?",
"BM": "[A-Z]{2}[ ]?[A-Z0-9]{2}",
"BN": "[A-Z]{2}[ ]?\\d{4}",
"BR": "\\d{5}[\\-]?\\d{3}",
"BY": "\\d{6}",
"CA": "[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ ]?\\d[ABCEGHJ-NPRSTV-Z]\\d",
"CC": "6799",
"CH": "\\d{4}",
"CK": "\\d{4}",
"CL": "\\d{7}",
"CN": "\\d{6}",
"CR": "\\d{4,5}|\\d{3}-\\d{4}",
"CS": "\\d{5}",
"CV": "\\d{4}",
"CX": "6798",
"CY": "\\d{4}",
"CZ": "\\d{3}[ ]?\\d{2}",
"DE": "\\d{5}",
"DK": "\\d{4}",
"DO": "\\d{5}",
"DZ": "\\d{5}",
"EC": "([A-Z]\\d{4}[A-Z]|(?:[A-Z]{2})?\\d{6})?",
"EE": "\\d{5}",
"EG": "\\d{5}",
"ES": "\\d{5}",
"ET": "\\d{4}",
"FI": "\\d{5}",
"FK": "FIQQ 1ZZ",
"FM": "(9694[1-4])([ \\-]\\d{4})?",
"FO": "\\d{3}",
"FR": "\\d{2}[ ]?\\d{3}",
"GB": "GIR[ ]?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}",
"GE": "\\d{4}",
"GF": "9[78]3\\d{2}",
"GG": "GY\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}",
"GL": "39\\d{2}",
"GN": "\\d{3}",
"GP": "9[78][01]\\d{2}",
"GR": "\\d{3}[ ]?\\d{2}",
"GS": "SIQQ 1ZZ",
"GT": "\\d{5}",
"GU": "969[123]\\d([ \\-]\\d{4})?",
"GW": "\\d{4}",
"HM": "\\d{4}",
"HN": "(?:\\d{5})?",
"HR": "\\d{5}",
"HT": "\\d{4}",
"HU": "\\d{4}",
"ID": "\\d{5}",
"IL": "\\d{5}",
"IM": "IM\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}",
"IN": "\\d{6}",
"IO": "BBND 1ZZ",
"IQ": "\\d{5}",
"IS": "\\d{3}",
"IT": "\\d{5}",
"JE": "JE\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}",
"JO": "\\d{5}",
"JP": "\\d{3}-\\d{4}",
"KE": "\\d{5}",
"KG": "\\d{6}",
"KH": "\\d{5}",
"KR": "\\d{3}[\\-]\\d{3}",
"KW": "\\d{5}",
"KZ": "\\d{6}",
"LA": "\\d{5}",
"LB": "(\\d{4}([ ]?\\d{4})?)?",
"LI": "(948[5-9])|(949[0-7])",
"LK": "\\d{5}",
"LR": "\\d{4}",
"LS": "\\d{3}",
"LT": "\\d{5}",
"LU": "\\d{4}",
"LV": "\\d{4}",
"MA": "\\d{5}",
"MC": "980\\d{2}",
"MD": "\\d{4}",
"ME": "8\\d{4}",
"MG": "\\d{3}",
"MH": "969[67]\\d([ \\-]\\d{4})?",
"MK": "\\d{4}",
"MN": "\\d{6}",
"MP": "9695[012]([ \\-]\\d{4})?",
"MQ": "9[78]2\\d{2}",
"MT": "[A-Z]{3}[ ]?\\d{2,4}",
"MU": "(\\d{3}[A-Z]{2}\\d{3})?",
"MV": "\\d{5}",
"MX": "\\d{5}",
"MY": "\\d{5}",
"NC": "988\\d{2}",
"NE": "\\d{4}",
"NF": "2899",
"NG": "(\\d{6})?",
"NI": "((\\d{4}-)?\\d{3}-\\d{3}(-\\d{1})?)?",
"NL": "\\d{4}[ ]?[A-Z]{2}",
"NO": "\\d{4}",
"NP": "\\d{5}",
"NZ": "\\d{4}",
"OM": "(PC )?\\d{3}",
"PF": "987\\d{2}",
"PG": "\\d{3}",
"PH": "\\d{4}",
"PK": "\\d{5}",
"PL": "\\d{2}-\\d{3}",
"PM": "9[78]5\\d{2}",
"PN": "PCRN 1ZZ",
"PR": "00[679]\\d{2}([ \\-]\\d{4})?",
"PT": "\\d{4}([\\-]\\d{3})?",
"PW": "96940",
"PY": "\\d{4}",
"RE": "9[78]4\\d{2}",
"RO": "\\d{6}",
"RS": "\\d{6}",
"RU": "\\d{6}",
"SA": "\\d{5}",
"SE": "\\d{3}[ ]?\\d{2}",
"SG": "\\d{6}",
"SH": "(ASCN|STHL) 1ZZ",
"SI": "\\d{4}",
"SJ": "\\d{4}",
"SK": "\\d{3}[ ]?\\d{2}",
"SM": "4789\\d",
"SN": "\\d{5}",
"SO": "\\d{5}",
"SZ": "[HLMS]\\d{3}",
"TC": "TKCA 1ZZ",
"TH": "\\d{5}",
"TJ": "\\d{6}",
"TM": "\\d{6}",
"TN": "\\d{4}",
"TR": "\\d{5}",
"TW": "\\d{3}(\\d{2})?",
"UA": "\\d{5}",
"US": "\\d{5}([ \\-]\\d{4})?",
"UY": "\\d{5}",
"UZ": "\\d{6}",
"VA": "00120",
"VE": "\\d{4}",
"VI": "008(([0-4]\\d)|(5[01]))([ \\-]\\d{4})?",
"WF": "986\\d{2}",
"XK": "\\d{5}",
"YT": "976\\d{2}",
"YU": "\\d{5}",
"ZA": "\\d{4}",
"ZM": "\\d{5}"
};
function isValidPostalCode(country, postalCode) {
if !codes[country] {
throw new Error("wat");
}
var rgx = new RegEx(codes[country]);
return rgx.test(postalCode + "");
}
console.log(isValidPostalCode("US", 98118));
console.log(isValidPostalCode("US", "98118");
console.log(isValidPostalCode("US", "98118-1234");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment