You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.4 KiB
96 lines
2.4 KiB
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}$/, |
|
BE: fourDigit, |
|
BG: fourDigit, |
|
BR: /^\d{5}-\d{3}$/, |
|
BY: /2[1-4]{1}\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: /\b(?!(\d)\1{3})[13-9]{4}[1346-9][013-9]{5}\b/, |
|
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, |
|
MX: fiveDigit, |
|
MT: /^[A-Za-z]{3}\s{0,1}\d{4}$/, |
|
MY: fiveDigit, |
|
NL: /^\d{4}\s?[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, "'")); |
|
} |