import assertString from './util/assertString'; // common patterns var threeDigit = /^\d{3}$/; var fourDigit = /^\d{4}$/; var fiveDigit = /^\d{5}$/; var sixDigit = /^\d{6}$/; var patterns = { AD: /^AD\d{3}$/, AT: fourDigit, AU: fourDigit, AZ: /^AZ\d{4}$/, BA: /^([7-8]\d{4}$)/, BE: fourDigit, BG: fourDigit, BR: /^\d{5}-\d{3}$/, BY: /^2[1-4]\d{4}$/, CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, CH: fourDigit, CN: /^(0[1-7]|1[012356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[1-5]|8[1345]|9[09])\d{4}$/, CZ: /^\d{3}\s?\d{2}$/, DE: fiveDigit, DK: fourDigit, DO: fiveDigit, DZ: fiveDigit, EE: fiveDigit, ES: /^(5[0-2]{1}|[0-4]{1}\d{1})\d{3}$/, FI: fiveDigit, FR: /^\d{2}\s?\d{3}$/, GB: /^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i, GR: /^\d{3}\s?\d{2}$/, HR: /^([1-5]\d{4}$)/, HT: /^HT\d{4}$/, HU: fourDigit, ID: fiveDigit, IE: /^(?!.*(?:o))[A-Za-z]\d[\dw]\s\w{4}$/i, IL: /^(\d{5}|\d{7})$/, IN: /^((?!10|29|35|54|55|65|66|86|87|88|89)[1-9][0-9]{5})$/, IR: /^(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}$/, IS: threeDigit, IT: fiveDigit, JP: /^\d{3}\-\d{4}$/, KE: fiveDigit, KR: /^(\d{5}|\d{6})$/, LI: /^(948[5-9]|949[0-7])$/, LT: /^LT\-\d{5}$/, LU: fourDigit, LV: /^LV\-\d{4}$/, LK: fiveDigit, MG: threeDigit, MX: fiveDigit, MT: /^[A-Za-z]{3}\s{0,1}\d{4}$/, MY: fiveDigit, NL: /^[1-9]\d{3}\s?(?!sa|sd|ss)[a-z]{2}$/i, NO: fourDigit, NP: /^(10|21|22|32|33|34|44|45|56|57)\d{3}$|^(977)$/i, NZ: fourDigit, PL: /^\d{2}\-\d{3}$/, PR: /^00[679]\d{2}([ -]\d{4})?$/, PT: /^\d{4}\-\d{3}?$/, RO: sixDigit, RU: sixDigit, SA: fiveDigit, SE: /^[1-9]\d{2}\s?\d{2}$/, SG: sixDigit, SI: fourDigit, SK: /^\d{3}\s?\d{2}$/, TH: fiveDigit, TN: fourDigit, TW: /^\d{3}(\d{2})?$/, UA: fiveDigit, US: /^\d{5}(-\d{4})?$/, ZA: fourDigit, ZM: fiveDigit }; export var locales = Object.keys(patterns); export default function isPostalCode(str, locale) { assertString(str); if (locale in patterns) { return patterns[locale].test(str); } else if (locale === 'any') { for (var key in patterns) { // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes // istanbul ignore else if (patterns.hasOwnProperty(key)) { var pattern = patterns[key]; if (pattern.test(str)) { return true; } } } return false; } throw new Error("Invalid locale '".concat(locale, "'")); }