Showing preview only (235K chars total). Download the full file or copy to clipboard to get everything.
Repository: FormatterKit/PostalCodeValidator
Branch: master
Commit: 545c443f6c76
Files: 15
Total size: 219.8 KB
Directory structure:
gitextract_1etc8eer/
├── .github/
│ └── workflows/
│ └── main.yml
├── .gitignore
├── Brewfile
├── LICENSE.md
├── Makefile
├── Package.swift
├── README.md
├── Resources/
│ └── postalData.json
├── Scripts/
│ └── Regions.swift
├── Sources/
│ └── PostalCodeValidator/
│ ├── PostalCodeValidator.swift
│ └── PostalCodeValidator.swift.gyb
└── Tests/
├── LinuxMain.swift
└── PostalCodeValidatorTests/
├── PostalCodeValidatorTests.swift
├── PostalCodeValidatorTests.swift.gyb
└── XCTestManifests.swift
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/main.yml
================================================
name: CI
on: [push]
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macOS-latest]
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Build and Test
run: swift test
================================================
FILE: .gitignore
================================================
.DS_Store
/.build
/Packages
/*.xcodeproj
.swiftpm
Resources/data/*
================================================
FILE: Brewfile
================================================
tap 'nshipster/formulae'
brew 'gyb'
================================================
FILE: LICENSE.md
================================================
Copyright 2019 Mattt (https://mat.tt)
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
================================================
FILE: Makefile
================================================
INPUTS = $(patsubst %,Resources/data/%.json,$(shell swift Scripts/Regions.swift))
.DEFAULT_GOAL: all
.PHONY: all
all: Sources/PostalCodeValidator/PostalCodeValidator.swift Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift
Sources/PostalCodeValidator/PostalCodeValidator.swift: Resources/postalData.json
Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift: Resources/postalData.json
Resources/data/%.json:
@mkdir -p Resources/data
@curl -sS "http://i18napis.appspot.com/address/data/$(basename $(notdir $@))" > $@
Resources/postalData.json: $(INPUTS)
@echo "[" > $@
@awk 'FNR==1 && NR!=1 {print ",\n"}{print}' Resources/data/* >> $@
@echo "]" >> $@
%.swift: %.swift.gyb
@gyb --line-directive '' -o $@ $<
.PHONY:
clean:
@rm -rf Resources/data
@rm -f Sources/PostalCodeValidator/PostalCodeValidator.swift
================================================
FILE: Package.swift
================================================
// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "PostalCodeValidator",
products: [
// Products define the executables and libraries produced by a package, and make them visible to other packages.
.library(
name: "PostalCodeValidator",
targets: ["PostalCodeValidator"]
),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PostalCodeValidator",
dependencies: []
),
.testTarget(
name: "PostalCodeValidatorTests",
dependencies: ["PostalCodeValidator"]
),
]
)
================================================
FILE: README.md
================================================
# PostalCodeValidator
[![Build Status][ci status badge]][ci status]
[![License][license badge]][license]
[![Swift Version][swift version badge]][swift version]
A validator for [postal codes](https://en.wikipedia.org/wiki/Postal_code)
with support for 200+ regions.
```swift
import Foundation
import PostalCodeValidator
if let validator = PostalCodeValidator(locale: .current) { // United States (US)
validator.validate(postalCode: "95014") // true
validator.validate(postalCode: "22162-1010") // true
validator.validate(postalCode: "1234567") // false
validator.validate(postalCode: "INVALID") // false
}
// 248 regions supported
if let validator = PostalCodeValidator(regionCode: "JP") { // Japan (JP)
validator.validate(postalCode: "154-0023") // true
validator.validate(postalCode: "12345") // false
}
```
> **Note**: Only the region of a locale is used to determine validation rules.
> To validate the postal code for a particular region,
> you can construct a locale using an identifier with the `"und"` language code.
## Requirements
- Swift 4.0+
## Installation
### Swift Package Manager
Add the PostalCodeValidator package to your target dependencies in `Package.swift`:
```swift
import PackageDescription
let package = Package(
name: "YourProject",
dependencies: [
.package(
url: "https://github.com/FormatterKit/PostalCodeValidator",
from: "0.1.0"
),
]
)
```
Then run the `swift build` command to build your project.
## Known Issues
- Armed forces in Germany (and likely other countries)
use [special postal codes](https://de.wikipedia.org/wiki/Feldpost_%28Bundeswehr%29),
which aren't included in the upstream data source.
This will cause validation of these postal codes to fail.
_(Thanks for pointing this out, [@timohetzel](https://twitter.com/timohetzel))_
## Additional Details
The CLDR previously maintained a list of postal code formats,
but that information was
[deprecated in v27](http://unicode.org/reports/tr35/tr35-info.html#Postal_Code_Validation).
Following the guidance of the
[twitter-cldr-rb](https://github.com/twitter/twitter-cldr-rb/issues/166) project,
`PostalCodeValidator` sources its information from http://i18napis.appspot.com.
The most recent release of this software uses
information retrieved from the website on November 27, 2019.
## License
MIT
## Contact
Mattt ([@mattt](https://twitter.com/mattt))
[ci status]: https://github.com/FormatterKit/PostalCodeValidator/actions
[ci status badge]: https://github.com/FormatterKit/PostalCodeValidator/workflows/CI/badge.svg
[license]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
[license badge]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
[swift version]: https://swift.org/download/
[swift version badge]: http://img.shields.io/badge/swift%20version-4.0+-orange.svg?style=flat
================================================
FILE: Resources/postalData.json
================================================
[
{
"zipex": "ASCN 1ZZ",
"name": "ASCENSION ISLAND",
"zip": "ASCN 1ZZ",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"key": "AC",
"id": "data/AC"
},
{
"lang": "ca",
"sub_zipexs": "AD500~AD100~AD200~AD700~AD400~AD300~AD600",
"zipex": "AD100,AD501,AD700",
"sub_zips": "AD50[01]~AD10[01]~AD20[01]~AD70[01]~AD40[01]~AD30[01]~AD60[01]",
"zip": "AD[1-7]0\\d",
"fmt": "%N%n%O%n%A%n%Z %C",
"languages": "ca",
"sub_keys": "Parròquia d'Andorra la Vella~Canillo~Encamp~Escaldes-Engordany~La Massana~Ordino~Sant Julià de Lòria",
"key": "AD",
"sub_isoids": "07~02~03~08~04~05~06",
"posturl": "http://www.correos.es/comun/CodigosPostales/1010_s-CodPostal.asp?Provincia=",
"id": "data/AD",
"sub_names": "Andorra la Vella~Canillo~Encamp~Escaldes-Engordany~La Massana~Ordino~Sant Julià de Lòria",
"name": "ANDORRA"
},
{
"lang": "ar",
"sub_lnames": "Abu Dhabi~Sharjah~Fujairah~Umm Al Quwain~Dubai~Ras al Khaimah~Ajman",
"name": "UNITED ARAB EMIRATES",
"require": "AS",
"state_name_type": "emirate",
"id": "data/AE",
"languages": "ar",
"lfmt": "%N%n%O%n%A%n%S",
"sub_keys": "أبو ظبي~إمارة الشارقةّ~الفجيرة~ام القيوين~إمارة دبيّ~إمارة رأس الخيمة~عجمان",
"key": "AE",
"sub_isoids": "AZ~SH~FU~UQ~DU~RK~AJ",
"fmt": "%N%n%O%n%A%n%S",
"sub_names": "أبو ظبي~الشارقة~الفجيرة~ام القيوين~دبي~رأس الخيمة~عجمان"
},
{
"zipex": "1001,2601,3801",
"key": "AF",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"posturl": "http://postalcode.afghanpost.gov.af/",
"id": "data/AF",
"name": "AFGHANISTAN"
},
{
"require": "A",
"id": "data/AG",
"key": "AG",
"name": "ANTIGUA AND BARBUDA"
},
{
"zipex": "2640",
"name": "ANGUILLA",
"zip": "(?:AI-)?2640",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"key": "AI",
"id": "data/AI"
},
{
"zipex": "1001,1017,3501",
"name": "ALBANIA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z%n%C",
"key": "AL",
"id": "data/AL"
},
{
"lang": "hy",
"sub_zipexs": "0201,0514~0601,0823~0901,1149~1201,1626~0000,0099~1701,2117~2201,2506~2601,3126~3201,3519~3601,3810~3901,4216",
"zipex": "375010,0002,0010",
"sub_zips": "0[2-5]~0[6-8]~09|1[01]~1[2-6]~00~1[7-9]|2[01]~2[2-5]~2[6-9]|3[01]~3[2-5]~3[6-8]~39|4[0-2]",
"zip": "(?:37)?\\d{4}",
"fmt": "%N%n%O%n%A%n%Z%n%C%n%S",
"languages": "hy",
"lfmt": "%N%n%O%n%A%n%Z%n%C%n%S",
"sub_lnames": "Aragatsotn~Ararat~Armavir~Gegharkunik~Yerevan~Lori~Kotayk~Shirak~Syunik~Vayots Dzor~Tavush",
"sub_keys": "Արագածոտն~Արարատ~Արմավիր~Գեղարքունիք~Երևան~Լոռի~Կոտայք~Շիրակ~Սյունիք~Վայոց ձոր~Տավուշ",
"key": "AM",
"sub_isoids": "AG~AR~AV~GR~ER~LO~KT~SH~SU~VD~TV",
"id": "data/AM",
"name": "ARMENIA"
},
{
"id": "data/AO",
"key": "AO",
"name": "ANGOLA"
},
{
"id": "data/AQ",
"key": "AQ",
"name": "ANTARCTICA"
},
{
"lang": "es",
"upper": "ACZ",
"zipex": "C1070AAM,C1000WAM,B1000TBU,X5187XAB",
"sub_zips": "B?[1-36-8]~K?[45]~H?3~U?[89]~C?1~X?[235-8]~W?3~E?[1-3]~P?[37]~Y?4~L?[3568]~F?5~M?[56]~N?3~Q?[38]~R?[89]~A?[34]~J?5~D?[4-6]~Z?[89]~S?[2368]~G?[2-5]~V?9~T?[45]",
"zip": "((?:[A-HJ-NP-Z])?\\d{4})([A-Z]{3})?",
"fmt": "%N%n%O%n%A%n%Z %C%n%S",
"languages": "es",
"sub_keys": "Buenos Aires~Catamarca~Chaco~Chubut~Ciudad Autónoma de Buenos Aires~Córdoba~Corrientes~Entre Ríos~Formosa~Jujuy~La Pampa~La Rioja~Mendoza~Misiones~Neuquén~Río Negro~Salta~San Juan~San Luis~Santa Cruz~Santa Fe~Santiago del Estero~Tierra del Fuego~Tucumán",
"key": "AR",
"sub_isoids": "B~K~H~U~C~X~W~E~P~Y~L~F~M~N~Q~R~A~J~D~Z~S~G~V~T",
"posturl": "http://www.correoargentino.com.ar/formularios/cpa",
"id": "data/AR",
"sub_names": "Buenos Aires~Catamarca~Chaco~Chubut~Ciudad Autónoma de Buenos Aires~Córdoba~Corrientes~Entre Ríos~Formosa~Jujuy~La Pampa~La Rioja~Mendoza~Misiones~Neuquén~Río Negro~Salta~San Juan~San Luis~Santa Cruz~Santa Fe~Santiago del Estero~Tierra del Fuego~Tucumán",
"name": "ARGENTINA"
},
{
"upper": "ACNOS",
"zipex": "96799",
"key": "AS",
"zip": "(96799)(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/AS",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "AMERICAN SAMOA"
},
{
"zipex": "1010,3741",
"key": "AT",
"zip": "\\d{4}",
"fmt": "%O%n%N%n%A%n%Z %C",
"id": "data/AT",
"posturl": "http://www.post.at/post_subsite_postleitzahlfinder.php",
"require": "ACZ",
"name": "AUSTRIA"
},
{
"lang": "en",
"upper": "CS",
"sub_zipexs": "0200,2540,2618,2999~1000,2888,3585,3707~0800,0999~4000,9999~5000~7000,7999~3000,8000~6000,0872",
"zipex": "2060,3171,6430,4000,4006,3001",
"sub_zips": "29|2540|260|261[0-8]|02|2620~1|2[0-57-8]|26[2-9]|261[189]|3500|358[56]|3644|3707~0[89]~[49]~5|0872~7~[38]~6|0872",
"zip": "\\d{4}",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/AU",
"languages": "en",
"sub_keys": "ACT~NSW~NT~QLD~SA~TAS~VIC~WA",
"key": "AU",
"locality_name_type": "suburb",
"posturl": "http://www1.auspost.com.au/postcodes/",
"fmt": "%O%n%N%n%A%n%C %S %Z",
"sub_names": "Australian Capital Territory~New South Wales~Northern Territory~Queensland~South Australia~Tasmania~Victoria~Western Australia",
"name": "AUSTRALIA"
},
{
"id": "data/AW",
"key": "AW",
"name": "ARUBA"
},
{
"postprefix": "AX-",
"zipex": "22150,22550,22240,22710,22270,22730,22430",
"key": "AX",
"zip": "22\\d{3}",
"fmt": "%O%n%N%n%A%nAX-%Z %C%nÅLAND",
"id": "data/AX",
"posturl": "http://www.posten.ax/department.con?iPage=123",
"require": "ACZ",
"name": "FINLAND"
},
{
"postprefix": "AZ ",
"zipex": "1000",
"name": "AZERBAIJAN",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%nAZ %Z %C",
"key": "AZ",
"id": "data/AZ"
},
{
"zipex": "71000",
"name": "BOSNIA AND HERZEGOVINA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "BA",
"id": "data/BA"
},
{
"zipex": "BB23026,BB22025",
"name": "BARBADOS",
"zip": "BB\\d{5}",
"fmt": "%N%n%O%n%A%n%C, %S %Z",
"state_name_type": "parish",
"key": "BB",
"id": "data/BB"
},
{
"zipex": "1340,1000",
"key": "BD",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%C - %Z",
"posturl": "http://www.bangladeshpost.gov.bd/PostCode.asp",
"id": "data/BD",
"name": "BANGLADESH"
},
{
"zipex": "4000,1000",
"key": "BE",
"zip": "\\d{4}",
"fmt": "%O%n%N%n%A%n%Z %C",
"id": "data/BE",
"posturl": "http://www.post.be/site/nl/residential/customerservice/search/postal_codes.html",
"require": "ACZ",
"name": "BELGIUM"
},
{
"fmt": "%N%n%O%n%A%n%C %X",
"id": "data/BF",
"key": "BF",
"name": "BURKINA FASO"
},
{
"zipex": "1000,1700",
"key": "BG",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://www.bgpost.bg/?cid=5",
"id": "data/BG",
"name": "BULGARIA (REP.)"
},
{
"zipex": "317",
"name": "BAHRAIN",
"zip": "(?:\\d|1[0-2])\\d{2}",
"fmt": "%N%n%O%n%A%n%C %Z",
"key": "BH",
"id": "data/BH"
},
{
"id": "data/BI",
"key": "BI",
"name": "BURUNDI"
},
{
"upper": "AC",
"id": "data/BJ",
"key": "BJ",
"name": "BENIN"
},
{
"upper": "ACX",
"zipex": "97100",
"key": "BL",
"zip": "9[78][01]\\d{2}",
"require": "ACZ",
"id": "data/BL",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "SAINT BARTHELEMY"
},
{
"zipex": "FL 07,HM GX,HM 12",
"key": "BM",
"zip": "[A-Z]{2} ?[A-Z0-9]{2}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.landvaluation.bm/",
"id": "data/BM",
"name": "BERMUDA"
},
{
"zipex": "BT2328,KA1131,BA1511",
"key": "BN",
"zip": "[A-Z]{2} ?\\d{4}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.post.gov.bn/index.php/extensions/postcode-guide",
"id": "data/BN",
"name": "BRUNEI DARUSSALAM"
},
{
"upper": "AC",
"id": "data/BO",
"key": "BO",
"name": "BOLIVIA"
},
{
"id": "data/BQ",
"key": "BQ",
"name": "BONAIRE, SINT EUSTATIUS, AND SABA"
},
{
"lang": "pt",
"sublocality_name_type": "neighborhood",
"sub_zipexs": "69900-000,69999-999~57000-000,57999-999~68900-000,68999-999~69000-000,69400-123~40000-000,48999-999~60000-000,63999-999~70000-000,73500-123~29000-000,29999-999~72800-000,73700-123~65000-000,65999-999~78000-000,78899-999~79000-000,79999-999~30000-000,39999-999~66000-000,68899-999~58000-000,58999-999~80000-000,87999-999~50000-000,56999-999~64000-000,64999-999~20000-000,28999-999~59000-000,59999-999~90000-000,99999-999~76800-000,78900-000,78999-999~69300-000,69399-999~88000-000,89999-999~01000-000,13000-123~49000-000,49999-999~77000-000,77999-999",
"zipex": "40301-110,70002-900",
"sub_zips": "699~57~689~69[0-24-8]~4[0-8]~6[0-3]~7[0-1]|72[0-7]|73[0-6]~29~72[89]|73[7-9]|7[4-6]~65~78[0-8]~79~3~6[6-7]|68[0-8]~58~8[0-7]~5[0-6]~64~2[0-8]~59~9~76[89]|789~693~8[89]~[01][1-9]~49~77",
"zip": "\\d{5}-?\\d{3}",
"upper": "CS",
"sub_mores": "true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true",
"require": "ASCZ",
"state_name_type": "state",
"id": "data/BR",
"languages": "pt",
"sub_keys": "AC~AL~AP~AM~BA~CE~DF~ES~GO~MA~MT~MS~MG~PA~PB~PR~PE~PI~RJ~RN~RS~RO~RR~SC~SP~SE~TO",
"key": "BR",
"sub_isoids": "AC~AL~AP~AM~BA~CE~DF~ES~GO~MA~MT~MS~MG~PA~PB~PR~PE~PI~RJ~RN~RS~RO~RR~SC~SP~SE~TO",
"posturl": "http://www.buscacep.correios.com.br/",
"fmt": "%O%n%N%n%A%n%D%n%C-%S%n%Z",
"sub_names": "Acre~Alagoas~Amapá~Amazonas~Bahia~Ceará~Distrito Federal~Espírito Santo~Goiás~Maranhão~Mato Grosso~Mato Grosso do Sul~Minas Gerais~Pará~Paraíba~Paraná~Pernambuco~Piauí~Rio de Janeiro~Rio Grande do Norte~Rio Grande do Sul~Rondônia~Roraima~Santa Catarina~São Paulo~Sergipe~Tocantins",
"name": "BRAZIL"
},
{
"lang": "en",
"name": "BAHAMAS",
"fmt": "%N%n%O%n%A%n%C, %S",
"state_name_type": "island",
"languages": "en",
"sub_keys": "Abaco~Acklins~Andros~Berry Islands~Bimini~Cat Island~Crooked Island~Eleuthera~Exuma~Grand Bahama~Harbour Island~Inagua~Long Island~Mayaguana~N.P.~Ragged Island~Rum Cay~San Salvador~Spanish Wells",
"key": "BS",
"sub_isoids": "~AK~~BY~BI~CI~~~EX~~HI~IN~LI~MG~~RI~RC~SS~SW",
"id": "data/BS",
"sub_names": "Abaco Islands~Acklins~Andros Island~Berry Islands~Bimini~Cat Island~Crooked Island~Eleuthera~Exuma and Cays~Grand Bahama~Harbour Island~Inagua~Long Island~Mayaguana~New Providence~Ragged Island~Rum Cay~San Salvador~Spanish Wells"
},
{
"zipex": "11001,31101,35003",
"key": "BT",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.bhutanpost.bt/searchpostcode.php",
"id": "data/BT",
"name": "BHUTAN"
},
{
"id": "data/BV",
"key": "BV",
"name": "BOUVET ISLAND"
},
{
"id": "data/BW",
"key": "BW",
"name": "BOTSWANA"
},
{
"zipex": "223016,225860,220050",
"key": "BY",
"zip": "\\d{6}",
"fmt": "%S%n%Z %C%n%A%n%O%n%N",
"posturl": "http://ex.belpost.by/addressbook/",
"id": "data/BY",
"name": "BELARUS"
},
{
"id": "data/BZ",
"key": "BZ",
"name": "BELIZE"
},
{
"lang": "en",
"upper": "ACNOSZ",
"zipex": "H3Z 2Y7,V8X 3X4,T0L 1K0,T0H 1A0,K1A 0B1",
"sub_zips": "T~V~R~E~A~X0E|X0G|X1A~B~X0A|X0B|X0C~K|L|M|N|P~C~G|H|J|K1A~S|R8A~Y",
"zip": "[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d",
"require": "ACSZ",
"id": "data/CA",
"languages": "en~fr",
"sub_keys": "AB~BC~MB~NB~NL~NT~NS~NU~ON~PE~QC~SK~YT",
"key": "CA",
"posturl": "https://www.canadapost.ca/cpo/mc/personal/postalcode/fpc.jsf",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"sub_names": "Alberta~British Columbia~Manitoba~New Brunswick~Newfoundland and Labrador~Northwest Territories~Nova Scotia~Nunavut~Ontario~Prince Edward Island~Quebec~Saskatchewan~Yukon",
"name": "CANADA"
},
{
"upper": "CS",
"zipex": "6799",
"name": "COCOS (KEELING) ISLANDS",
"zip": "6799",
"fmt": "%O%n%N%n%A%n%C %S %Z",
"key": "CC",
"id": "data/CC"
},
{
"id": "data/CD",
"key": "CD",
"name": "CONGO (DEM. REP.)"
},
{
"id": "data/CF",
"key": "CF",
"name": "CENTRAL AFRICAN REPUBLIC"
},
{
"id": "data/CG",
"key": "CG",
"name": "CONGO (REP.)"
},
{
"postprefix": "CH-",
"upper": "",
"zipex": "2544,1211,1556,3030",
"key": "CH",
"zip": "\\d{4}",
"require": "ACZ",
"id": "data/CH",
"posturl": "http://www.post.ch/db/owa/pv_plz_pack/pr_main",
"fmt": "%O%n%N%n%A%nCH-%Z %C",
"name": "SWITZERLAND"
},
{
"fmt": "%N%n%O%n%X %A %C %X",
"id": "data/CI",
"key": "CI",
"name": "COTE D'IVOIRE"
},
{
"id": "data/CK",
"key": "CK",
"name": "COOK ISLANDS"
},
{
"lang": "es",
"zipex": "8340457,8720019,1230000,8329100",
"posturl": "http://www.correos.cl/SitePages/home.aspx",
"zip": "\\d{7}",
"sub_mores": "true~true~true~true~true~true~true~true~true~true~true~true~true~true~true",
"fmt": "%N%n%O%n%A%n%Z %C%n%S",
"languages": "es",
"sub_keys": "Antofagasta~Araucanía~Arica y Parinacota~Atacama~Aysén~Biobío~Coquimbo~O'Higgins~Los Lagos~Los Ríos~Magallanes~Maule~Región Metropolitana~Tarapacá~Valparaíso",
"key": "CL",
"sub_isoids": "AN~AR~AP~AT~AI~BI~CO~LI~LL~LR~MA~ML~RM~TA~VS",
"id": "data/CL",
"sub_names": "Antofagasta~Araucanía~Arica y Parinacota~Atacama~Aysén del General Carlos Ibáñez del Campo~Biobío~Coquimbo~Libertador General Bernardo O'Higgins~Los Lagos~Los Ríos~Magallanes y de la Antártica Chilena~Maule~Metropolitana de Santiago~Tarapacá~Valparaíso",
"name": "CHILE"
},
{
"id": "data/CM",
"key": "CM",
"name": "CAMEROON"
},
{
"lang": "zh",
"sublocality_name_type": "district",
"sub_xrequires": "~A~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ACS~~~",
"zipex": "266033,317204,100096,100808",
"key": "CN",
"zip": "\\d{6}",
"upper": "S",
"sub_mores": "true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true",
"require": "ACSZ",
"id": "data/CN",
"languages": "zh",
"lfmt": "%N%n%O%n%A%n%D%n%C%n%S, %Z",
"sub_lnames": "Anhui Sheng~Macau~Beijing Shi~Chongqing Shi~Fujian Sheng~Gansu Sheng~Guangdong Sheng~Guangxi Zhuangzuzizhiqu~Guizhou Sheng~Hainan Sheng~Hebei Sheng~Henan Sheng~Heilongjiang Sheng~Hubei Sheng~Hunan Sheng~Jilin Sheng~Jiangsu Sheng~Jiangxi Sheng~Liaoning Sheng~Neimenggu Zizhiqu~Ningxia Huizuzizhiqu~Qinghai Sheng~Shandong Sheng~Shanxi Sheng~Shaanxi Sheng~Shanghai Shi~Sichuan Sheng~Taiwan~Tianjin Shi~Xizang Zizhiqu~Hong Kong~Xinjiang Weiwuerzizhiqu~Yunnan Sheng~Zhejiang Sheng",
"sub_keys": "安徽省~澳门~北京市~重庆市~福建省~甘肃省~广东省~广西壮族自治区~贵州省~海南省~河北省~河南省~黑龙江省~湖北省~湖南省~吉林省~江苏省~江西省~辽宁省~内蒙古自治区~宁夏回族自治区~青海省~山东省~山西省~陕西省~上海市~四川省~台湾~天津市~西藏自治区~香港~新疆维吾尔自治区~云南省~浙江省",
"sub_xzips": "~999078~~~~~~~~~~~~~~~~~~~~~~~~~~\\d{3}(\\d{2})?~~~999077~~~",
"sub_isoids": "34~92~11~50~35~62~44~45~52~46~13~41~23~42~43~22~32~36~21~15~64~63~37~14~61~31~51~71~12~54~91~65~53~33",
"posturl": "http://www.ems.com.cn/serviceguide/you_bian_cha_xun.html",
"fmt": "%Z%n%S%C%D%n%A%n%O%n%N",
"sub_names": "安徽省~澳门~北京市~重庆市~福建省~甘肃省~广东省~广西~贵州省~海南省~河北省~河南省~黑龙江省~湖北省~湖南省~吉林省~江苏省~江西省~辽宁省~内蒙古~宁夏~青海省~山东省~山西省~陕西省~上海市~四川省~台湾~天津市~西藏~香港~新疆~云南省~浙江省",
"name": "CHINA"
},
{
"zipex": "111221,130001,760011",
"key": "CO",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%C, %S, %Z",
"state_name_type": "department",
"id": "data/CO",
"posturl": "http://www.codigopostal.gov.co/",
"require": "AS",
"name": "COLOMBIA"
},
{
"zipex": "1000,2010,1001",
"key": "CR",
"zip": "\\d{4,5}|\\d{3}-\\d{4}",
"fmt": "%N%n%O%n%A%n%S, %C%n%Z",
"id": "data/CR",
"posturl": "https://www.correos.go.cr/nosotros/codigopostal/busqueda.html",
"require": "ACS",
"name": "COSTA RICA"
},
{
"lang": "pt",
"zipex": "7600",
"name": "CAPE VERDE",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C%n%S",
"state_name_type": "island",
"languages": "pt",
"sub_keys": "Boa Vista~Brava~Fogo~Maio~Sal~Santiago~Santo Antão~São Nicolau~São Vicente",
"key": "CV",
"sub_isoids": "BV~BR~~MA~SL~~~~SV",
"id": "data/CV"
},
{
"id": "data/CW",
"key": "CW",
"name": "CURACAO"
},
{
"upper": "CS",
"zipex": "6798",
"name": "CHRISTMAS ISLAND",
"zip": "6798",
"fmt": "%O%n%N%n%A%n%C %S %Z",
"key": "CX",
"id": "data/CX"
},
{
"zipex": "2008,3304,1900",
"name": "CYPRUS",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "CY",
"id": "data/CY"
},
{
"zipex": "100 00,251 66,530 87,110 00,225 99",
"key": "CZ",
"zip": "\\d{3} ?\\d{2}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://psc.ceskaposta.cz/CleanForm.action",
"id": "data/CZ",
"name": "CZECH REP."
},
{
"zipex": "26133,53225",
"key": "DE",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/DE",
"posturl": "http://www.postdirekt.de/plzserver/",
"require": "ACZ",
"name": "GERMANY"
},
{
"id": "data/DJ",
"key": "DJ",
"name": "DJIBOUTI"
},
{
"zipex": "8660,1566",
"key": "DK",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/DK",
"posturl": "http://www.postdanmark.dk/da/Privat/Kundeservice/postnummerkort/Sider/Find-postnummer.aspx",
"require": "ACZ",
"name": "DENMARK"
},
{
"id": "data/DM",
"key": "DM",
"name": "DOMINICA"
},
{
"zipex": "11903,10101",
"key": "DO",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://inposdom.gob.do/codigo-postal/",
"id": "data/DO",
"name": "DOMINICAN REP."
},
{
"zipex": "40304,16027",
"name": "ALGERIA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "DZ",
"id": "data/DZ"
},
{
"upper": "CZ",
"zipex": "090105,092301",
"key": "EC",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%Z%n%C",
"posturl": "http://www.codigopostal.gob.ec/",
"id": "data/EC",
"name": "ECUADOR"
},
{
"zipex": "69501,11212",
"key": "EE",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://www.post.ee/?op=sihtnumbriotsing",
"id": "data/EE",
"name": "ESTONIA"
},
{
"lang": "ar",
"sub_zipexs": "81000~71000~21000,23000~41000~85000~84000~22000~12000~35000~43000~44000~31000~63000~11000~13000~32000~61000~72000~62000~42000~46000~34000~82000~45000~83000~33000~51000",
"zipex": "12411,11599",
"sub_zips": "81~71~2[13]~41~85~84~22~12~35~43~44~31~63~11~13~32~61~72~62~42~46~34~82~45~83~33~51",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C%n%S%n%Z",
"languages": "ar",
"lfmt": "%N%n%O%n%A%n%C%n%S%n%Z",
"sub_lnames": "Aswan Governorate~Asyut Governorate~Alexandria Governorate~Ismailia Governorate~Luxor Governorate~Red Sea Governorate~El Beheira Governorate~Giza Governorate~Dakahlia Governorate~Suez Governorate~Ash Sharqia Governorate~Gharbia Governorate~Faiyum Governorate~Cairo Governorate~Qalyubia Governorate~Menofia Governorate~Menia Governorate~New Valley Governorate~Beni Suef Governorate~Port Said Governorate~South Sinai Governorate~Damietta Governorate~Sohag Governorate~North Sinai Governorate~Qena Governorate~Kafr El Sheikh Governorate~Matrouh Governorate",
"sub_keys": "أسوان~أسيوط~الإسكندرية~الإسماعيلية~الأقصر~البحر الأحمر~البحيرة~الجيزة~الدقهلية~السويس~الشرقية~الغربية~الفيوم~القاهرة~القليوبية~المنوفية~المنيا~الوادي الجديد~بني سويف~بورسعيد~جنوب سيناء~دمياط~سوهاج~شمال سيناء~قنا~كفر الشيخ~مطروح",
"key": "EG",
"sub_isoids": "ASN~AST~ALX~IS~LX~BA~BH~GZ~DK~SUZ~SHR~GH~FYM~C~KB~MNF~MN~WAD~BNS~PTS~JS~DT~SHG~SIN~KN~KFS~MT",
"id": "data/EG",
"name": "EGYPT"
},
{
"zipex": "70000,72000",
"name": "WESTERN SAHARA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "EH",
"id": "data/EH"
},
{
"id": "data/ER",
"key": "ER",
"name": "ERITREA"
},
{
"lang": "es",
"upper": "CS",
"zipex": "28039,28300,28070",
"sub_zips": "15~01~02~03~04~33~05~06~08~09~10~11~39~12~51~13~14~16~17~18~19~20~21~22~07~23~26~35~24~25~27~28~29~52~30~31~32~34~36~37~38~40~41~42~43~44~45~46~47~48~49~50",
"zip": "\\d{5}",
"require": "ACSZ",
"id": "data/ES",
"languages": "es",
"sub_keys": "A Coruña~Álava~Albacete~Alicante~Almería~Asturias~Ávila~Badajoz~Barcelona~Burgos~Cáceres~Cádiz~Cantabria~Castellón~Ceuta~Ciudad Real~Córdoba~Cuenca~Girona~Granada~Guadalajara~Guipúzcoa~Huelva~Huesca~Islas Baleares~Jaén~La Rioja~Las Palmas~León~Lleida~Lugo~Madrid~Málaga~Melilla~Murcia~Navarra~Ourense~Palencia~Pontevedra~Salamanca~Santa Cruz de Tenerife~Segovia~Sevilla~Soria~Tarragona~Teruel~Toledo~Valencia~Valladolid~Vizcaya~Zamora~Zaragoza",
"key": "ES",
"sub_isoids": "C~VI~AB~A~AL~O~AV~BA~B~BU~CC~CA~S~CS~CE~CR~CO~CU~GI~GR~GU~SS~H~HU~PM~J~LO~GC~LE~L~LU~M~MA~ML~MU~NA~OR~P~PO~SA~TF~SG~SE~SO~T~TE~TO~V~VA~BI~ZA~Z",
"posturl": "http://www.correos.es/contenido/13-MenuRec2/04-MenuRec24/1010_s-CodPostal.asp",
"fmt": "%N%n%O%n%A%n%Z %C %S",
"name": "SPAIN"
},
{
"zipex": "1000",
"name": "ETHIOPIA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "ET",
"id": "data/ET"
},
{
"postprefix": "FI-",
"zipex": "00550,00011",
"key": "FI",
"zip": "\\d{5}",
"fmt": "%O%n%N%n%A%nFI-%Z %C",
"id": "data/FI",
"posturl": "http://www.verkkoposti.com/e3/postinumeroluettelo",
"require": "ACZ",
"name": "FINLAND"
},
{
"id": "data/FJ",
"key": "FJ",
"name": "FIJI"
},
{
"upper": "CZ",
"zipex": "FIQQ 1ZZ",
"name": "FALKLAND ISLANDS (MALVINAS)",
"zip": "FIQQ 1ZZ",
"require": "ACZ",
"id": "data/FK",
"key": "FK",
"fmt": "%N%n%O%n%A%n%C%n%Z"
},
{
"upper": "ACNOS",
"zipex": "96941,96944",
"key": "FM",
"zip": "(9694[1-4])(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/FM",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "MICRONESIA (Federated State of)"
},
{
"postprefix": "FO",
"zipex": "100",
"key": "FO",
"zip": "\\d{3}",
"fmt": "%N%n%O%n%A%nFO%Z %C",
"posturl": "http://www.postur.fo/",
"id": "data/FO",
"name": "FAROE ISLANDS"
},
{
"upper": "CX",
"zipex": "33380,34092,33506",
"key": "FR",
"zip": "\\d{2} ?\\d{3}",
"require": "ACZ",
"id": "data/FR",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "FRANCE"
},
{
"id": "data/GA",
"key": "GA",
"name": "GABON"
},
{
"upper": "CZ",
"zipex": "EC1Y 8SY,GIR 0AA,M2 5BQ,M34 4AB,CR0 2YR,DN16 9AA,W1A 4ZZ,EC1A 1HQ,OX14 4PG,BS18 8HF,NR25 7HG,RH6 0NP,BH23 6AA,B6 5BA,SO23 9AP,PO1 3AX,BFPO 61",
"key": "GB",
"zip": "GIR ?0AA|(?:(?:AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|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}",
"require": "ACZ",
"id": "data/GB",
"posturl": "http://www.royalmail.com/postcode-finder",
"locality_name_type": "post_town",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"name": "UNITED KINGDOM"
},
{
"id": "data/GD",
"key": "GD",
"name": "GRENADA (WEST INDIES)"
},
{
"zipex": "0101",
"key": "GE",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://www.georgianpost.ge/index.php?page=10",
"id": "data/GE",
"name": "GEORGIA"
},
{
"upper": "ACX",
"zipex": "97300",
"key": "GF",
"zip": "9[78]3\\d{2}",
"require": "ACZ",
"id": "data/GF",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "FRENCH GUIANA"
},
{
"upper": "CZ",
"zipex": "GY1 1AA,GY2 2BT",
"key": "GG",
"zip": "GY\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}",
"require": "ACZ",
"id": "data/GG",
"posturl": "http://www.guernseypost.com/postcode_finder/",
"fmt": "%N%n%O%n%A%n%C%nGUERNSEY%n%Z",
"name": "CHANNEL ISLANDS"
},
{
"id": "data/GH",
"key": "GH",
"name": "GHANA"
},
{
"zipex": "GX11 1AA",
"name": "GIBRALTAR",
"zip": "GX11 1AA",
"require": "A",
"id": "data/GI",
"key": "GI",
"fmt": "%N%n%O%n%A%nGIBRALTAR%n%Z"
},
{
"zipex": "3900,3950,3911",
"name": "GREENLAND",
"zip": "39\\d{2}",
"require": "ACZ",
"id": "data/GL",
"key": "GL",
"fmt": "%N%n%O%n%A%n%Z %C"
},
{
"id": "data/GM",
"key": "GM",
"name": "GAMBIA"
},
{
"zipex": "001,200,100",
"name": "GUINEA",
"zip": "\\d{3}",
"fmt": "%N%n%O%n%Z %A %C",
"key": "GN",
"id": "data/GN"
},
{
"upper": "ACX",
"zipex": "97100",
"key": "GP",
"zip": "9[78][01]\\d{2}",
"require": "ACZ",
"id": "data/GP",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "GUADELOUPE"
},
{
"id": "data/GQ",
"key": "GQ",
"name": "EQUATORIAL GUINEA"
},
{
"zipex": "151 24,151 10,101 88",
"key": "GR",
"zip": "\\d{3} ?\\d{2}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/GR",
"posturl": "http://www.elta.gr/findapostcode.aspx",
"require": "ACZ",
"name": "GREECE"
},
{
"upper": "CZ",
"zipex": "SIQQ 1ZZ",
"name": "SOUTH GEORGIA",
"zip": "SIQQ 1ZZ",
"require": "ACZ",
"id": "data/GS",
"key": "GS",
"fmt": "%N%n%O%n%A%n%n%C%n%Z"
},
{
"zipex": "09001,01501",
"name": "GUATEMALA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z- %C",
"key": "GT",
"id": "data/GT"
},
{
"upper": "ACNOS",
"zipex": "96910,96931",
"key": "GU",
"zip": "(969(?:[12]\\d|3[12]))(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/GU",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "GUAM"
},
{
"zipex": "1000,1011",
"name": "GUINEA-BISSAU",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "GW",
"id": "data/GW"
},
{
"id": "data/GY",
"key": "GY",
"name": "GUYANA"
},
{
"lang": "zh-Hant",
"upper": "S",
"sub_lnames": "Kowloon~Hong Kong Island~New Territories",
"name": "HONG KONG",
"sub_mores": "true~true~true",
"require": "AS",
"state_name_type": "area",
"id": "data/HK",
"languages": "zh-Hant~en",
"lfmt": "%N%n%O%n%A%n%C%n%S",
"sub_keys": "九龍~香港島~新界",
"key": "HK",
"locality_name_type": "district",
"fmt": "%S%n%C%n%A%n%O%n%N"
},
{
"upper": "CS",
"zipex": "7050",
"name": "HEARD AND MCDONALD ISLANDS",
"zip": "\\d{4}",
"fmt": "%O%n%N%n%A%n%C %S %Z",
"key": "HM",
"id": "data/HM"
},
{
"zipex": "31301",
"name": "HONDURAS",
"zip": "\\d{5}",
"require": "ACS",
"id": "data/HN",
"key": "HN",
"fmt": "%N%n%O%n%A%n%C, %S%n%Z"
},
{
"postprefix": "HR-",
"zipex": "10000,21001,10002",
"key": "HR",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%nHR-%Z %C",
"posturl": "http://www.posta.hr/default.aspx?pretpum",
"id": "data/HR",
"name": "CROATIA"
},
{
"postprefix": "HT",
"zipex": "6120,5310,6110,8510",
"name": "HAITI",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%nHT%Z %C",
"key": "HT",
"id": "data/HT"
},
{
"upper": "ACNO",
"zipex": "1037,2380,1540",
"key": "HU",
"zip": "\\d{4}",
"require": "ACZ",
"id": "data/HU",
"posturl": "http://posta.hu/ugyfelszolgalat/iranyitoszam_kereso",
"fmt": "%N%n%O%n%C%n%A%n%Z",
"name": "HUNGARY (Rep.)"
},
{
"lang": "id",
"zipex": "40115",
"name": "INDONESIA",
"zip": "\\d{5}",
"require": "AS",
"id": "data/ID",
"languages": "id",
"sub_keys": "Aceh~Bali~Banten~Bengkulu~Daerah Istimewa Yogyakarta~DKI Jakarta~Gorontalo~Jambi~Jawa Barat~Jawa Tengah~Jawa Timur~Kalimantan Barat~Kalimantan Selatan~Kalimantan Tengah~Kalimantan Timur~Kalimantan Utara~Kepulauan Bangka Belitung~Kepulauan Riau~Lampung~Maluku~Maluku Utara~Nusa Tenggara Barat~Nusa Tenggara Timur~Papua~Papua Barat~Riau~Sulawesi Barat~Sulawesi Selatan~Sulawesi Tengah~Sulawesi Tenggara~Sulawesi Utara~Sumatera Barat~Sumatera Selatan~Sumatera Utara",
"key": "ID",
"sub_isoids": "AC~BA~BT~BE~YO~JK~GO~JA~JB~JT~JI~KB~KS~KT~KI~KU~BB~KR~LA~MA~MU~NB~NT~PA~PB~RI~SR~SN~ST~SG~SA~SB~SS~SU",
"fmt": "%N%n%O%n%A%n%C%n%S %Z"
},
{
"lang": "en",
"sublocality_name_type": "townland",
"zipex": "A65 F4E2",
"posturl": "https://finder.eircode.ie",
"zip": "[\\dA-Z]{3} ?[\\dA-Z]{4}",
"zip_name_type": "eircode",
"fmt": "%N%n%O%n%A%n%D%n%C%n%S %Z",
"state_name_type": "county",
"languages": "en",
"sub_keys": "Co. Carlow~Co. Cavan~Co. Clare~Co. Cork~Co. Donegal~Co. Dublin~Co. Galway~Co. Kerry~Co. Kildare~Co. Kilkenny~Co. Laois~Co. Leitrim~Co. Limerick~Co. Longford~Co. Louth~Co. Mayo~Co. Meath~Co. Monaghan~Co. Offaly~Co. Roscommon~Co. Sligo~Co. Tipperary~Co. Waterford~Co. Westmeath~Co. Wexford~Co. Wicklow",
"key": "IE",
"sub_isoids": "CW~CN~CE~C~DL~D~G~KY~KE~KK~LS~LM~LK~LD~LH~MO~MH~MN~OY~RN~SO~TA~WD~WH~WX~WW",
"id": "data/IE",
"name": "IRELAND"
},
{
"zipex": "9614303",
"key": "IL",
"zip": "\\d{5}(?:\\d{2})?",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.israelpost.co.il/zipcode.nsf/demozip?openform",
"id": "data/IL",
"name": "ISRAEL"
},
{
"upper": "CZ",
"zipex": "IM2 1AA,IM99 1PS",
"key": "IM",
"zip": "IM\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}",
"require": "ACZ",
"id": "data/IM",
"posturl": "http://www.gov.im/post/postal/fr_main.asp",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"name": "ISLE OF MAN"
},
{
"lang": "en",
"zipex": "110034,110001",
"sub_zips": "744~5[0-3]~79[0-2]~78~8[0-5]~16|1440[3-9]~49~396~396~11~403~3[6-9]~1[23]~17~1[89]~81[4-9]|82|83[0-5]~5[4-9]|53[7-9]~6[7-9]|6010|607008|777~673~4[5-8]|490~4[0-4]~79[56]~79[34]~796~79[78]~7[5-7]~605~1[456]~3[0-4]~737|750~6[0-6]|536~5[0-3]~799~2[0-35-8]|24[0-7]|26[12]~24[46-9]|254|26[23]~7[0-4]",
"zip": "\\d{6}",
"zip_name_type": "pin",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/IN",
"languages": "en",
"sub_keys": "Andaman and Nicobar Islands~Andhra Pradesh~Arunachal Pradesh~Assam~Bihar~Chandigarh~Chhattisgarh~Dadra and Nagar Haveli~Daman and Diu~Delhi~Goa~Gujarat~Haryana~Himachal Pradesh~Jammu and Kashmir~Jharkhand~Karnataka~Kerala~Lakshadweep~Madhya Pradesh~Maharashtra~Manipur~Meghalaya~Mizoram~Nagaland~Odisha~Puducherry~Punjab~Rajasthan~Sikkim~Tamil Nadu~Telangana~Tripura~Uttar Pradesh~Uttarakhand~West Bengal",
"key": "IN",
"sub_isoids": "AN~AP~AR~AS~BR~CH~CT~DN~DD~DL~GA~GJ~HR~HP~JK~JH~KA~KL~LD~MP~MH~MN~ML~MZ~NL~OR~PY~PB~RJ~SK~TN~TG~TR~UP~UT~WB",
"posturl": "http://cept.gov.in/lbpsd/placesearch.aspx",
"fmt": "%N%n%O%n%A%n%C %Z%n%S",
"sub_names": "Andaman & Nicobar~Andhra Pradesh~Arunachal Pradesh~Assam~Bihar~Chandigarh~Chhattisgarh~Dadra & Nagar Haveli~Daman & Diu~Delhi~Goa~Gujarat~Haryana~Himachal Pradesh~Jammu & Kashmir~Jharkhand~Karnataka~Kerala~Lakshadweep~Madhya Pradesh~Maharashtra~Manipur~Meghalaya~Mizoram~Nagaland~Odisha~Puducherry~Punjab~Rajasthan~Sikkim~Tamil Nadu~Telangana~Tripura~Uttar Pradesh~Uttarakhand~West Bengal",
"name": "INDIA"
},
{
"upper": "CZ",
"zipex": "BBND 1ZZ",
"name": "BRITISH INDIAN OCEAN TERRITORY",
"zip": "BBND 1ZZ",
"require": "ACZ",
"id": "data/IO",
"key": "IO",
"fmt": "%N%n%O%n%A%n%C%n%Z"
},
{
"upper": "CS",
"zipex": "31001",
"name": "IRAQ",
"zip": "\\d{5}",
"require": "ACS",
"id": "data/IQ",
"key": "IQ",
"fmt": "%O%n%N%n%A%n%C, %S%n%Z"
},
{
"sublocality_name_type": "neighborhood",
"zipex": "11936-12345",
"name": "IRAN",
"zip": "\\d{5}-?\\d{5}",
"fmt": "%O%n%N%n%S%n%C, %D%n%A%n%Z",
"key": "IR",
"id": "data/IR"
},
{
"zipex": "320,121,220,110",
"key": "IS",
"zip": "\\d{3}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "https://www.postur.is/um-postinn/posthus/gotuskra/",
"id": "data/IS",
"name": "ICELAND"
},
{
"lang": "it",
"upper": "CS",
"zipex": "00144,47037,39049",
"sub_zips": "92~15~60~11~52~63~14~83~70~76[01]~32~82~24~13[89]~40~39~25~72~0912[1-9]|0913[0-4]|0901[0289]|0902[03468]|0903[0234]|0904|0803[035]|08043~93~860[1-4]|86100~0901[013-7]~81~95~88[01]~66~22~87~26[01]~88[89]~12|18025~94~638|63900~44~50~71~47[015]~03~16~34[01]7~58~18~860[7-9]|86170~67~19~04~73~23[89]~57~26[89]~55~62~46~54~75~0902[012579]|0903[015-9]|09040~98~20~41~208|20900~80~28[01]~080[1-3]|08100~08037|0804[024-9]~08020|0702|0703[08]~090[7-9]|09170|0801[039]|0803[04]~35~90~43~27~06~61~65~29~56~51~330[7-9]|33170~85~59~97~48~89[01]~42~02~47[89]~00~45~84~070[14]|0703[0-79]|07100~17|12071~53~96~23[01]~74~64~05~10~91~38~31~3401|341[0-689]|34062~330[1-5]|33100~21~30~28[89]~13[01]~37~89[89]~36~01",
"zip": "\\d{5}",
"require": "ACSZ",
"id": "data/IT",
"languages": "it",
"sub_keys": "AG~AL~AN~AO~AR~AP~AT~AV~BA~BT~BL~BN~BG~BI~BO~BZ~BS~BR~CA~CL~CB~CI~CE~CT~CZ~CH~CO~CS~CR~KR~CN~EN~FM~FE~FI~FG~FC~FR~GE~GO~GR~IM~IS~AQ~SP~LT~LE~LC~LI~LO~LU~MC~MN~MS~MT~VS~ME~MI~MO~MB~NA~NO~NU~OG~OT~OR~PD~PA~PR~PV~PG~PU~PE~PC~PI~PT~PN~PZ~PO~RG~RA~RC~RE~RI~RN~RM~RO~SA~SS~SV~SI~SR~SO~TA~TE~TR~TO~TP~TN~TV~TS~UD~VA~VE~VB~VC~VR~VV~VI~VT",
"key": "IT",
"posturl": "http://www.poste.it/online/cercacap/",
"fmt": "%N%n%O%n%A%n%Z %C %S",
"sub_names": "Agrigento~Alessandria~Ancona~Aosta~Arezzo~Ascoli Piceno~Asti~Avellino~Bari~Barletta-Andria-Trani~Belluno~Benevento~Bergamo~Biella~Bologna~Bolzano~Brescia~Brindisi~Cagliari~Caltanissetta~Campobasso~Carbonia-Iglesias~Caserta~Catania~Catanzaro~Chieti~Como~Cosenza~Cremona~Crotone~Cuneo~Enna~Fermo~Ferrara~Firenze~Foggia~Forlì-Cesena~Frosinone~Genova~Gorizia~Grosseto~Imperia~Isernia~L'Aquila~La Spezia~Latina~Lecce~Lecco~Livorno~Lodi~Lucca~Macerata~Mantova~Massa-Carrara~Matera~Medio Campidano~Messina~Milano~Modena~Monza e Brianza~Napoli~Novara~Nuoro~Ogliastra~Olbia-Tempio~Oristano~Padova~Palermo~Parma~Pavia~Perugia~Pesaro e Urbino~Pescara~Piacenza~Pisa~Pistoia~Pordenone~Potenza~Prato~Ragusa~Ravenna~Reggio Calabria~Reggio Emilia~Rieti~Rimini~Roma~Rovigo~Salerno~Sassari~Savona~Siena~Siracusa~Sondrio~Taranto~Teramo~Terni~Torino~Trapani~Trento~Treviso~Trieste~Udine~Varese~Venezia~Verbano-Cusio-Ossola~Vercelli~Verona~Vibo Valentia~Vicenza~Viterbo",
"name": "ITALY"
},
{
"upper": "CZ",
"zipex": "JE1 1AA,JE2 2BT",
"key": "JE",
"zip": "JE\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}",
"require": "ACZ",
"id": "data/JE",
"posturl": "http://www.jerseypost.com/tools/postcode-address-finder/",
"fmt": "%N%n%O%n%A%n%C%nJERSEY%n%Z",
"name": "CHANNEL ISLANDS"
},
{
"lang": "en",
"name": "JAMAICA",
"require": "ACS",
"state_name_type": "parish",
"id": "data/JM",
"languages": "en",
"sub_keys": "Clarendon~Hanover~Kingston~Manchester~Portland~St. Andrew~St. Ann~St. Catherine~St. Elizabeth~St. James~St. Mary~St. Thomas~Trelawny~Westmoreland",
"key": "JM",
"sub_isoids": "13~09~01~12~04~02~06~14~11~08~05~03~07~10",
"fmt": "%N%n%O%n%A%n%C%n%S %X"
},
{
"zipex": "11937,11190",
"name": "JORDAN",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C %Z",
"key": "JO",
"id": "data/JO"
},
{
"lang": "ja",
"upper": "S",
"zipex": "154-0023,350-1106,951-8073,112-0001,208-0032,231-0012",
"sub_zips": "0[4-9]|00[1-7]~03|018~02~98~01~99~9[67]~3[01]~32|311|349~37|38[49]~3[3-6]~2[6-9]~1[0-8]|19[0-8]|20~2[1-5]|199~9[45]|389~93~92|939~91|922~40~3[89]|949~50~4[1-9]~4[4-9]|431~51|498|647~52~6[0-2]|520~5[3-9]|618|630~6[5-7]|563~63|64[78]~64|519~68~69|68[45]~7[01]~7[23]~7[45]~77~76~79~78~8[0-3]|871~84~85|81[17]|848~86~87|839~88~89~90",
"zip": "\\d{3}-?\\d{4}",
"require": "ACSZ",
"state_name_type": "prefecture",
"id": "data/JP",
"languages": "ja",
"lfmt": "%N%n%O%n%A%n%C, %S%n%Z",
"sub_lnames": "Hokkaido~Aomori~Iwate~Miyagi~Akita~Yamagata~Fukushima~Ibaraki~Tochigi~Gunma~Saitama~Chiba~Tokyo~Kanagawa~Niigata~Toyama~Ishikawa~Fukui~Yamanashi~Nagano~Gifu~Shizuoka~Aichi~Mie~Shiga~Kyoto~Osaka~Hyogo~Nara~Wakayama~Tottori~Shimane~Okayama~Hiroshima~Yamaguchi~Tokushima~Kagawa~Ehime~Kochi~Fukuoka~Saga~Nagasaki~Kumamoto~Oita~Miyazaki~Kagoshima~Okinawa",
"sub_keys": "北海道~青森県~岩手県~宮城県~秋田県~山形県~福島県~茨城県~栃木県~群馬県~埼玉県~千葉県~東京都~神奈川県~新潟県~富山県~石川県~福井県~山梨県~長野県~岐阜県~静岡県~愛知県~三重県~滋賀県~京都府~大阪府~兵庫県~奈良県~和歌山県~鳥取県~島根県~岡山県~広島県~山口県~徳島県~香川県~愛媛県~高知県~福岡県~佐賀県~長崎県~熊本県~大分県~宮崎県~鹿児島県~沖縄県",
"key": "JP",
"sub_isoids": "01~02~03~04~05~06~07~08~09~10~11~12~13~14~15~16~17~18~19~20~21~22~23~24~25~26~27~28~29~30~31~32~33~34~35~36~37~38~39~40~41~42~43~44~45~46~47",
"posturl": "http://search.post.japanpost.jp/zipcode/",
"fmt": "〒%Z%n%S%C%n%A%n%O%n%N",
"name": "JAPAN"
},
{
"zipex": "20100,00100",
"name": "KENYA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"key": "KE",
"id": "data/KE"
},
{
"zipex": "720001",
"name": "KYRGYZSTAN",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "KG",
"id": "data/KG"
},
{
"zipex": "12203,14206,12000",
"name": "CAMBODIA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C %Z",
"key": "KH",
"id": "data/KH"
},
{
"upper": "ACNOS",
"name": "KIRIBATI",
"fmt": "%N%n%O%n%A%n%S%n%C",
"state_name_type": "island",
"key": "KI",
"id": "data/KI"
},
{
"upper": "AC",
"id": "data/KM",
"key": "KM",
"name": "COMOROS"
},
{
"lang": "en",
"name": "SAINT KITTS AND NEVIS",
"require": "ACS",
"state_name_type": "island",
"id": "data/KN",
"languages": "en",
"sub_keys": "Nevis~St. Kitts",
"key": "KN",
"sub_isoids": "N~K",
"fmt": "%N%n%O%n%A%n%C, %S"
},
{
"lang": "ko",
"sublocality_name_type": "district",
"sub_zipexs": "25627~12410~53286~38540~62394~42456~34316~46706~06321~30065~44782~23024~59222~56445~63563~32832~28006",
"zipex": "03051",
"sub_zips": "2[456]\\d{2}~1[0-8]\\d{2}~5[0-3]\\d{2}~(?:3[6-9]|40)\\d{2}~6[12]\\d{2}~4[12]\\d{2}~3[45]\\d{2}~4[6-9]\\d{2}~0[1-8]\\d{2}~30[01]\\d~4[45]\\d{2}~2[1-3]\\d{2}~5[7-9]\\d{2}~5[4-6]\\d{2}~63[0-356]\\d~3[1-3]\\d{2}~2[789]\\d{2}",
"zip": "\\d{5}",
"upper": "Z",
"sub_mores": "true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true",
"require": "ACSZ",
"state_name_type": "do_si",
"id": "data/KR",
"languages": "ko",
"lfmt": "%N%n%O%n%A%n%D%n%C%n%S%n%Z",
"sub_lnames": "Gangwon-do~Gyeonggi-do~Gyeongsangnam-do~Gyeongsangbuk-do~Gwangju~Daegu~Daejeon~Busan~Seoul~Sejong~Ulsan~Incheon~Jeollanam-do~Jeollabuk-do~Jeju-do~Chungcheongnam-do~Chungcheongbuk-do",
"sub_keys": "강원도~경기도~경상남도~경상북도~광주광역시~대구광역시~대전광역시~부산광역시~서울특별시~세종특별자치시~울산광역시~인천광역시~전라남도~전라북도~제주특별자치도~충청남도~충청북도",
"key": "KR",
"sub_isoids": "42~41~48~47~29~27~30~26~11~50~31~28~46~45~49~44~43",
"posturl": "http://www.epost.go.kr/search/zipcode/search5.jsp",
"fmt": "%S %C%D%n%A%n%O%n%N%n%Z",
"sub_names": "강원~경기~경남~경북~광주~대구~대전~부산~서울~세종~울산~인천~전남~전북~제주~충남~충북",
"name": "SOUTH KOREA"
},
{
"zipex": "54541,54551,54404,13009",
"name": "KUWAIT",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "KW",
"id": "data/KW"
},
{
"lang": "en",
"zipex": "KY1-1100,KY1-1702,KY2-2101",
"posturl": "http://www.caymanpost.gov.ky/",
"zip": "KY\\d-\\d{4}",
"require": "AS",
"state_name_type": "island",
"id": "data/KY",
"languages": "en",
"sub_keys": "Cayman Brac~Grand Cayman~Little Cayman",
"key": "KY",
"fmt": "%N%n%O%n%A%n%S %Z",
"name": "CAYMAN ISLANDS"
},
{
"zipex": "040900,050012",
"name": "KAZAKHSTAN",
"zip": "\\d{6}",
"fmt": "%Z%n%S%n%C%n%A%n%O%n%N",
"key": "KZ",
"id": "data/KZ"
},
{
"zipex": "01160,01000",
"name": "LAO (PEOPLE'S DEM. REP.)",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "LA",
"id": "data/LA"
},
{
"zipex": "2038 3054,1107 2810,1000",
"name": "LEBANON",
"zip": "(?:\\d{4})(?: ?(?:\\d{4}))?",
"fmt": "%N%n%O%n%A%n%C %Z",
"key": "LB",
"id": "data/LB"
},
{
"id": "data/LC",
"key": "LC",
"name": "SAINT LUCIA"
},
{
"postprefix": "FL-",
"zipex": "9496,9491,9490,9485",
"key": "LI",
"zip": "948[5-9]|949[0-7]",
"fmt": "%O%n%N%n%A%nFL-%Z %C",
"id": "data/LI",
"posturl": "http://www.post.ch/db/owa/pv_plz_pack/pr_main",
"require": "ACZ",
"name": "LIECHTENSTEIN"
},
{
"zipex": "20000,00100",
"key": "LK",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"posturl": "http://www.slpost.gov.lk/",
"id": "data/LK",
"name": "SRI LANKA"
},
{
"zipex": "1000",
"name": "LIBERIA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "LR",
"id": "data/LR"
},
{
"zipex": "100",
"name": "LESOTHO",
"zip": "\\d{3}",
"fmt": "%N%n%O%n%A%n%C %Z",
"key": "LS",
"id": "data/LS"
},
{
"postprefix": "LT-",
"zipex": "04340,03500",
"key": "LT",
"zip": "\\d{5}",
"fmt": "%O%n%N%n%A%nLT-%Z %C",
"posturl": "http://www.post.lt/lt/?id=316",
"id": "data/LT",
"name": "LITHUANIA"
},
{
"postprefix": "L-",
"zipex": "4750,2998",
"key": "LU",
"zip": "\\d{4}",
"fmt": "%O%n%N%n%A%nL-%Z %C",
"id": "data/LU",
"posturl": "https://www.post.lu/fr/grandes-entreprises/solutions-postales/rechercher-un-code-postal",
"require": "ACZ",
"name": "LUXEMBOURG"
},
{
"zipex": "LV-1073,LV-1000",
"key": "LV",
"zip": "LV-\\d{4}",
"fmt": "%N%n%O%n%A%n%C, %Z",
"posturl": "http://www.pasts.lv/lv/uzzinas/nodalas/",
"id": "data/LV",
"name": "LATVIA"
},
{
"id": "data/LY",
"key": "LY",
"name": "LIBYA"
},
{
"zipex": "53000,10000,20050,16052",
"name": "MOROCCO",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "MA",
"id": "data/MA"
},
{
"postprefix": "MC-",
"zipex": "98000,98020,98011,98001",
"name": "MONACO",
"zip": "980\\d{2}",
"fmt": "%N%n%O%n%A%nMC-%Z %C %X",
"key": "MC",
"id": "data/MC"
},
{
"postprefix": "MD-",
"zipex": "2012,2019",
"name": "Rep. MOLDOVA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%nMD-%Z %C",
"key": "MD",
"id": "data/MD"
},
{
"zipex": "81257,81258,81217,84314,85366",
"name": "MONTENEGRO",
"zip": "8\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "ME",
"id": "data/ME"
},
{
"upper": "ACX",
"zipex": "97100",
"key": "MF",
"zip": "9[78][01]\\d{2}",
"require": "ACZ",
"id": "data/MF",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "SAINT MARTIN"
},
{
"zipex": "501,101",
"name": "MADAGASCAR",
"zip": "\\d{3}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "MG",
"id": "data/MG"
},
{
"upper": "ACNOS",
"zipex": "96960,96970",
"key": "MH",
"zip": "(969[67]\\d)(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/MH",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "MARSHALL ISLANDS"
},
{
"zipex": "1314,1321,1443,1062",
"name": "MACEDONIA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "MK",
"id": "data/MK"
},
{
"id": "data/ML",
"key": "ML",
"name": "MALI"
},
{
"zipex": "11181",
"name": "MYANMAR",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C, %Z",
"key": "MM",
"id": "data/MM"
},
{
"zipex": "65030,65270",
"key": "MN",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C%n%S %Z",
"posturl": "http://www.zipcode.mn/",
"id": "data/MN",
"name": "MONGOLIA"
},
{
"name": "MACAO",
"require": "A",
"id": "data/MO",
"lfmt": "%N%n%O%n%A",
"key": "MO",
"fmt": "%A%n%O%n%N"
},
{
"upper": "ACNOS",
"zipex": "96950,96951,96952",
"key": "MP",
"zip": "(9695[012])(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/MP",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "NORTHERN MARIANA ISLANDS"
},
{
"upper": "ACX",
"zipex": "97220",
"key": "MQ",
"zip": "9[78]2\\d{2}",
"require": "ACZ",
"id": "data/MQ",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "MARTINIQUE"
},
{
"upper": "AC",
"id": "data/MR",
"key": "MR",
"name": "MAURITANIA"
},
{
"id": "data/MS",
"key": "MS",
"name": "MONTSERRAT"
},
{
"upper": "CZ",
"zipex": "NXR 01,ZTN 05,GPO 01,BZN 1130,SPB 6031,VCT 1753",
"key": "MT",
"zip": "[A-Z]{3} ?\\d{2,4}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://postcodes.maltapost.com/",
"id": "data/MT",
"name": "MALTA"
},
{
"upper": "CZ",
"zipex": "42602",
"name": "MAURITIUS",
"zip": "\\d{3}(?:\\d{2}|[A-Z]{2}\\d{3})",
"fmt": "%N%n%O%n%A%n%Z%n%C",
"key": "MU",
"id": "data/MU"
},
{
"zipex": "20026",
"key": "MV",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.maldivespost.com/?lid=10",
"id": "data/MV",
"name": "MALDIVES"
},
{
"fmt": "%N%n%O%n%A%n%C %X",
"id": "data/MW",
"key": "MW",
"name": "MALAWI"
},
{
"lang": "es",
"sublocality_name_type": "neighborhood",
"sub_zipexs": "20000,20999~21000,22999~23000,23999~24000,24999~29000,30999~31000,33999~00000,16999~25000,27999~28000,28999~34000,35999~50000,57999~36000,38999~39000,41999~42000,43999~44000,49999~58000,61999~62000,62999~63000,63999~64000,67999~68000,71999~72000,75999~76000,76999~77000,77999~78000,79999~80000,82999~83000,85999~86000,86999~87000,89999~90000,90999~91000,96999~97000,97999~98000,99999",
"zipex": "02860,77520,06082",
"sub_zips": "20~2[12]~23~24~29|30~3[1-3]~0|1[0-6]~2[5-7]~28~3[45]~5[0-7]~3[6-8]~39|4[01]~4[23]~4[4-9]~5[89]|6[01]~62~63~6[4-7]~6[89]|7[01]~7[2-5]~76~77~7[89]~8[0-2]~8[3-5]~86~8[7-9]~90~9[1-6]~97~9[89]",
"zip": "\\d{5}",
"upper": "CSZ",
"require": "ACZ",
"state_name_type": "state",
"id": "data/MX",
"languages": "es",
"sub_keys": "AGS~BC~BCS~CAMP~CHIS~CHIH~CDMX~COAH~COL~DGO~MEX~GTO~GRO~HGO~JAL~MICH~MOR~NAY~NL~OAX~PUE~QRO~QROO~SLP~SIN~SON~TAB~TAMPS~TLAX~VER~YUC~ZAC",
"key": "MX",
"sub_isoids": "AGU~BCN~BCS~CAM~CHP~CHH~DIF~COA~COL~DUR~MEX~GUA~GRO~HID~JAL~MIC~MOR~NAY~NLE~OAX~PUE~QUE~ROO~SLP~SIN~SON~TAB~TAM~TLA~VER~YUC~ZAC",
"posturl": "http://www.correosdemexico.gob.mx/ServiciosLinea/Paginas/ccpostales.aspx",
"fmt": "%N%n%O%n%A%n%D%n%Z %C, %S",
"sub_names": "Aguascalientes~Baja California~Baja California Sur~Campeche~Chiapas~Chihuahua~Ciudad de México~Coahuila~Colima~Durango~Estado de México~Guanajuato~Guerrero~Hidalgo~Jalisco~Michoacán~Morelos~Nayarit~Nuevo León~Oaxaca~Puebla~Querétaro~Quintana Roo~San Luís Potosí~Sinalóa~Sonora~Tabasco~Tamaulipas~Tlaxcala~Veracruz~Yucatán~Zacatecas",
"name": "MEXICO"
},
{
"lang": "ms",
"sublocality_name_type": "village_township",
"sub_zipexs": "79000,86999~05000,09999,34950~15000,18599~50000,60000~87000,87999~75000,78399~70000,73599~25000,28999,39000,49000,69000~30000,36899,39000~01000,02799~10000,14999~62000,62999~88000,91999~93000,98999~40000,48999,63000,68199~20000,24999",
"zipex": "43000,50754,88990,50670",
"sub_zips": "79|8[0-6]~0[5-9]|34950~1[5-9]~5|60~87~7[5-8]~7[0-4]~2[5-8]|[346]9~3[0-6]|39000~0[12]~1[0-4]~62~8[89]|9[01]~9[3-8]~4[0-8]|6[3-8]~2[0-4]",
"zip": "\\d{5}",
"upper": "CS",
"require": "ACZ",
"state_name_type": "state",
"id": "data/MY",
"languages": "ms",
"sub_keys": "Johor~Kedah~Kelantan~Kuala Lumpur~Labuan~Melaka~Negeri Sembilan~Pahang~Perak~Perlis~Pulau Pinang~Putrajaya~Sabah~Sarawak~Selangor~Terengganu",
"key": "MY",
"sub_isoids": "01~02~03~14~15~04~05~06~08~09~07~16~12~13~10~11",
"posturl": "http://www.pos.com.my",
"fmt": "%N%n%O%n%A%n%D%n%Z %C%n%S",
"name": "MALAYSIA"
},
{
"zipex": "1102,1119,3212",
"name": "MOZAMBIQUE",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "MZ",
"id": "data/MZ"
},
{
"id": "data/NA",
"key": "NA",
"name": "NAMIBIA"
},
{
"upper": "ACX",
"zipex": "98814,98800,98810",
"key": "NC",
"zip": "988\\d{2}",
"require": "ACZ",
"id": "data/NC",
"posturl": "http://poste.opt.nc/index.php?option=com_content&view=article&id=80&Itemid=131",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "NEW CALEDONIA"
},
{
"zipex": "8001",
"name": "NIGER",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "NE",
"id": "data/NE"
},
{
"upper": "CS",
"zipex": "2899",
"name": "NORFOLK ISLAND",
"zip": "2899",
"fmt": "%O%n%N%n%A%n%C %S %Z",
"key": "NF",
"id": "data/NF"
},
{
"lang": "en",
"upper": "CS",
"zipex": "930283,300001,931104",
"posturl": "http://www.nigeriapostcodes.com/",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%C %Z%n%S",
"state_name_type": "state",
"languages": "en",
"sub_keys": "Abia~Adamawa~Akwa Ibom~Anambra~Bauchi~Bayelsa~Benue~Borno~Cross River~Delta~Ebonyi~Edo~Ekiti~Enugu~Federal Capital Territory~Gombe~Imo~Jigawa~Kaduna~Kano~Katsina~Kebbi~Kogi~Kwara~Lagos~Nasarawa~Niger~Ogun State~Ondo~Osun~Oyo~Plateau~Rivers~Sokoto~Taraba~Yobe~Zamfara",
"key": "NG",
"sub_isoids": "AB~AD~AK~AN~BA~BY~BE~BO~CR~DE~EB~ED~EK~EN~FC~GO~IM~JI~KD~KN~KT~KE~KO~KW~LA~NA~NI~OG~ON~OS~OY~PL~RI~SO~TA~YO~ZA",
"id": "data/NG",
"name": "NIGERIA"
},
{
"lang": "es",
"upper": "CS",
"zipex": "52000",
"sub_zips": "5[12]~4[56]~2[5-7]~5[56]~3[12]~4[34]~6[56]~2[12]~3[45]~1[0-6]~4[12]~6[1-3]~3[7-9]~7[12]~8[1-3]~9[12]~4[78]",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z%n%C, %S",
"state_name_type": "department",
"languages": "es",
"sub_keys": "Boaco~Carazo~Chinandega~Chontales~Esteli~Granada~Jinotega~Leon~Madriz~Managua~Masaya~Matagalpa~Nueva Segovia~Raan~Raas~Rio San Juan~Rivas",
"key": "NI",
"sub_isoids": "BO~CA~CI~CO~ES~GR~JI~LE~MD~MN~MS~MT~NS~AN~AS~SJ~RI",
"posturl": "http://www.correos.gob.ni/index.php/codigo-postal-2",
"id": "data/NI",
"name": "NICARAGUA"
},
{
"zipex": "1234 AB,2490 AA",
"key": "NL",
"zip": "\\d{4} ?[A-Z]{2}",
"fmt": "%O%n%N%n%A%n%Z %C",
"id": "data/NL",
"posturl": "http://www.postnl.nl/voorthuis/",
"require": "ACZ",
"name": "NETHERLANDS"
},
{
"zipex": "0025,0107,6631",
"key": "NO",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/NO",
"posturl": "http://adressesok.posten.no/nb/postal_codes/search",
"locality_name_type": "post_town",
"require": "ACZ",
"name": "NORWAY"
},
{
"zipex": "44601",
"key": "NP",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.gpo.gov.np/postalcode.aspx",
"id": "data/NP",
"name": "NEPAL"
},
{
"lang": "en",
"name": "NAURU CENTRAL PACIFIC",
"require": "AS",
"state_name_type": "district",
"id": "data/NR",
"languages": "en",
"sub_keys": "Aiwo District~Anabar District~Anetan District~Anibare District~Baiti District~Boe District~Buada District~Denigomodu District~Ewa District~Ijuw District~Meneng District~Nibok District~Uaboe District~Yaren District",
"key": "NR",
"sub_isoids": "01~02~03~04~05~06~07~08~09~10~11~12~13~14",
"fmt": "%N%n%O%n%A%n%S"
},
{
"id": "data/NU",
"key": "NU",
"name": "NIUE"
},
{
"zipex": "6001,6015,6332,8252,1030",
"key": "NZ",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%D%n%C %Z",
"id": "data/NZ",
"posturl": "http://www.nzpost.co.nz/Cultures/en-NZ/OnlineTools/PostCodeFinder/",
"require": "ACZ",
"name": "NEW ZEALAND"
},
{
"zipex": "133,112,111",
"name": "OMAN",
"zip": "(?:PC )?\\d{3}",
"fmt": "%N%n%O%n%A%n%Z%n%C",
"key": "OM",
"id": "data/OM"
},
{
"upper": "CS",
"fmt": "%N%n%O%n%A%n%C%n%S",
"id": "data/PA",
"key": "PA",
"name": "PANAMA (REP.)"
},
{
"zipex": "LIMA 23,LIMA 42,CALLAO 2,02001",
"key": "PE",
"zip": "(?:LIMA \\d{1,2}|CALLAO 0?\\d)|[0-2]\\d{4}",
"fmt": "%N%n%O%n%A%n%C %Z%n%S",
"posturl": "http://www.serpost.com.pe/cpostal/codigo",
"id": "data/PE",
"name": "PERU"
},
{
"upper": "CS",
"zipex": "98709",
"name": "FRENCH POLYNESIA",
"zip": "987\\d{2}",
"require": "ACSZ",
"state_name_type": "island",
"id": "data/PF",
"key": "PF",
"fmt": "%N%n%O%n%A%n%Z %C %S"
},
{
"zipex": "111",
"name": "PAPUA NEW GUINEA",
"zip": "\\d{3}",
"require": "ACS",
"id": "data/PG",
"key": "PG",
"fmt": "%N%n%O%n%A%n%C %Z %S"
},
{
"lang": "en",
"sub_zipexs": "2800,2826~8600,8611~8500,8513~5600,5616~4500,4517~5700,5717~3800,3806,3808~3200,3207~7300,7306~2100,2114~3900,3905~4200,4234~2600,2615~6543,6550~6300,6337~8700,8723~3000,3024~3500,3528~4600,4612~4400,4436~9100,9104~5800,5816~4800,4810~4100,4126~6000,6053~8800,8810~9400,9417~8100,8120~8000,8015~~8200,8210~~6800,6822~5044,5046~3600,3610~2900,2922~2700,2733~5000,5043~3300,3336~3807,3809,3814~2500,2520~4000,4033~9200,9223~9300,9321,9700,9716~6500,6542~9600,9619~4900,4905~5400,5421~~5100,5111~5200,5214~7200,7215~9000,9025~2616,2625~6100,6132~6200,6224~6400,6423~3100,3133~3700,3714~5300,5322~2000,2022~2400,2447~4300,4342~3400,3405~1850,1990~5500,5516~6700,6725~8015~6225,6230~4700,4715~9500,9513~~9800,9811~7400,7416~8400,8427~8300,8319~2300,2318~7500,7509~2200,2213~7100,7124~7000,7043~7000,7043",
"zipex": "1008,1050,1135,1207,2000,1000",
"sub_zips": "28[0-2]~86[01]~85[01]~56[01]~45[01]~57[01]~380[0-68]~320~730~21[01]~390~42[0-3]~26(0|1[0-5])~65(4[3-9]|5)~63[0-3]~87[0-2]~30[0-2]~35[0-2]~46[01]~44[0-3]~910~58[01]~48[01]~41[0-2]~60[0-5]~88[01]~94[01]~81[0-2]~80[01]~~82[01]~~68[0-2]~504[4-6]~36[01]~29[0-2]~27[0-3]~50([0-3]|4[0-3])~33[0-3]~38(0[79]|1[0-4])~25[0-2]~40[0-3]~92[0-2]~9(3[0-2]|7[01])~65([0-3]|4[0-2])~96[01]~490~54[0-2]~~51[01]~52[01]~72[01]~90[0-2]~26(1[6-9]|2[0-5])~61[0-3]~62[0-2]~64[0-2]~31[0-3]~37[01]~53[0-2]~20[0-2]~24[0-4]~43[0-4]~340~1[89]~55[01]~67[0-2]~8015~62(2[5-9]|30)~47[01]~95[01]~~98[01]~74[01]~84[02]~83[01]~23[01]~750~22[01]~71[0-2]~70[0-4]~70[0-4]",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%D, %C%n%Z %S",
"languages": "en",
"sub_keys": "Abra~Agusan del Norte~Agusan del Sur~Aklan~Albay~Antique~Apayao~Aurora~Basilan~Bataan~Batanes~Batangas~Benguet~Biliran~Bohol~Bukidnon~Bulacan~Cagayan~Camarines Norte~Camarines Sur~Camiguin~Capiz~Catanduanes~Cavite~Cebu~Compostela Valley~Cotabato~Davao del Norte~Davao del Sur~Davao Occidental~Davao Oriental~Dinagat Islands~Eastern Samar~Guimaras~Ifugao~Ilocos Norte~Ilocos Sur~Iloilo~Isabela~Kalinga~La Union~Laguna~Lanao del Norte~Lanao del Sur~Leyte~Maguindanao~Marinduque~Masbate~Metro Manila~Mindoro Occidental~Mindoro Oriental~Misamis Occidental~Misamis Oriental~Mountain Province~Negros Occidental~Negros Oriental~Northern Samar~Nueva Ecija~Nueva Vizcaya~Palawan~Pampanga~Pangasinan~Quezon Province~Quirino~Rizal~Romblon~Samar~Sarangani~Siquijor~Sorsogon~South Cotabato~Southern Leyte~Sultan Kudarat~Sulu~Surigao del Norte~Surigao del Sur~Tarlac~Tawi-Tawi~Zambales~Zamboanga del Norte~Zamboanga del Sur~Zamboanga Sibuguey",
"key": "PH",
"sub_isoids": "ABR~AGN~AGS~AKL~ALB~ANT~APA~AUR~BAS~BAN~BTN~BTG~BEN~BIL~BOH~BUK~BUL~CAG~CAN~CAS~CAM~CAP~CAT~CAV~CEB~COM~NCO~DAV~DAS~~DAO~DIN~EAS~GUI~IFU~ILN~ILS~ILI~ISA~KAL~LUN~LAG~LAN~LAS~LEY~MAG~MAD~MAS~00~MDC~MDR~MSC~MSR~MOU~NEC~NER~NSA~NUE~NUV~PLW~PAM~PAN~QUE~QUI~RIZ~ROM~WSA~SAR~SIG~SOR~SCO~SLE~SUK~SLU~SUN~SUR~TAR~TAW~ZMB~ZAN~ZAS~ZSI",
"posturl": "http://www.philpost.gov.ph/",
"id": "data/PH",
"name": "PHILIPPINES"
},
{
"zipex": "44000",
"key": "PK",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C-%Z",
"posturl": "http://www.pakpost.gov.pk/postcode/postcode.html",
"id": "data/PK",
"name": "PAKISTAN"
},
{
"zipex": "00-950,05-470,48-300,32-015,00-940",
"key": "PL",
"zip": "\\d{2}-\\d{3}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/PL",
"posturl": "http://kody.poczta-polska.pl/",
"require": "ACZ",
"name": "POLAND"
},
{
"upper": "ACX",
"zipex": "97500",
"name": "ST. PIERRE AND MIQUELON",
"zip": "9[78]5\\d{2}",
"require": "ACZ",
"id": "data/PM",
"key": "PM",
"fmt": "%O%n%N%n%A%n%Z %C %X"
},
{
"upper": "CZ",
"zipex": "PCRN 1ZZ",
"name": "PITCAIRN",
"zip": "PCRN 1ZZ",
"require": "ACZ",
"id": "data/PN",
"key": "PN",
"fmt": "%N%n%O%n%A%n%C%n%Z"
},
{
"postprefix": "PR",
"upper": "ACNO",
"zipex": "00930",
"key": "PR",
"zip": "(00[679]\\d{2})(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACZ",
"id": "data/PR",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C PR %Z",
"name": "PUERTO RICO"
},
{
"id": "data/PS",
"key": "PS",
"name": "PALESTINIAN TERRITORY"
},
{
"zipex": "2725-079,1250-096,1201-950,2860-571,1208-148",
"key": "PT",
"zip": "\\d{4}-\\d{3}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/PT",
"posturl": "http://www.ctt.pt/feapl_2/app/open/tools.jspx?tool=1",
"require": "ACZ",
"name": "PORTUGAL"
},
{
"upper": "ACNOS",
"zipex": "96940",
"key": "PW",
"zip": "(969(?:39|40))(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/PW",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "PALAU"
},
{
"zipex": "1536,1538,1209",
"name": "PARAGUAY",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "PY",
"id": "data/PY"
},
{
"upper": "AC",
"id": "data/QA",
"key": "QA",
"name": "QATAR"
},
{
"upper": "ACX",
"zipex": "97400",
"key": "RE",
"zip": "9[78]4\\d{2}",
"require": "ACZ",
"id": "data/RE",
"posturl": "http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",
"fmt": "%O%n%N%n%A%n%Z %C %X",
"name": "REUNION"
},
{
"upper": "AC",
"zipex": "060274,061357,200716",
"key": "RO",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://www.posta-romana.ro/zip_codes",
"id": "data/RO",
"name": "ROMANIA"
},
{
"zipex": "106314",
"key": "RS",
"zip": "\\d{5,6}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://www.posta.rs/struktura/lat/aplikacije/pronadji/nadji-postu.asp",
"id": "data/RS",
"name": "REPUBLIC OF SERBIA"
},
{
"lang": "ru",
"upper": "AC",
"zipex": "247112,103375,188300",
"sub_zips": "65[6-9]~67[56]~16[3-5]~41[4-6]~30[89]~24[1-3]~60[0-2]~40[0-4]~16[0-2]~39[4-7]~679~6(?:7[2-4]|87)~15[3-5]~66[4-9]~36[01]~23[6-8]~24[89]~68[348]~369~65[0-4]~61[0-3]~15[67]~35[0-4]~6(?:6[0-3]|4[78])~64[01]~30[5-7]~18[78]~39[89]~68[56]~1(?:0[1-9]|1|2|3[0-5]|4[0-4])~14[0-4]~18[34]~166~60[3-7]~17[3-5]~63[0-3]~64[4-6]~46[0-2]~30[23]~44[0-2]~61[4-9]~69[0-2]~18[0-2]~385~649~45[0-3]~67[01]~36[78]~386~35[89]~18[56]~16[7-9]~29[5-8]~42[45]~43[01]~67[78]~36[23]~42[0-3]~66[78]~42[67]~655~34[4-7]~39[01]~44[3-6]~19~41[0-3]~69[34]~62[0-4]~299~21[4-6]~35[5-7]~39[23]~17[0-2]~63[4-6]~30[01]~62[5-7]~43[23]~68[0-2]~628~45[4-7]~36[4-6]~42[89]~689~629~15[0-2]",
"zip": "\\d{6}",
"require": "ACSZ",
"state_name_type": "oblast",
"id": "data/RU",
"languages": "ru",
"lfmt": "%N%n%O%n%A%n%C%n%S%n%Z",
"sub_lnames": "Altayskiy kray~Amurskaya oblast'~Arkhangelskaya oblast'~Astrakhanskaya oblast'~Belgorodskaya oblast'~Bryanskaya oblast'~Vladimirskaya oblast'~Volgogradskaya oblast'~Vologodskaya oblast'~Voronezhskaya oblast'~Evreyskaya avtonomnaya oblast'~Zabaykalskiy kray~Ivanovskaya oblast'~Irkutskaya oblast'~Kabardino-Balkarskaya Republits~Kaliningradskaya oblast'~Kaluzhskaya oblast'~Kamchatskiy kray~Karachaevo-Cherkesskaya Republits~Kemerovskaya oblast'~Kirovskaya oblast'~Kostromskaya oblast'~Krasnodarskiy kray~Krasnoyarskiy kray~Kurganskaya oblast'~Kurskaya oblast'~Leningradskaya oblast'~Lipetskaya oblast'~Magadanskaya oblast'~gorod Moskva~Moskovskaya oblast'~Murmanskaya oblast'~Nenetskiy~Nizhegorodskaya oblast'~Novgorodskaya oblast'~Novosibirskaya oblast'~Omskaya oblast'~Orenburgskaya oblast'~Orlovskaya oblast'~Penzenskaya oblast'~Permskiy kray~Primorskiy kray~Pskovskaya oblast'~Respublika Adygeya~Altay Republits~Bashkortostan Republits~Buryatiya Republits~Dagestan Republits~Ingushetiya Republits~Respublika Kalmykiya~Kareliya Republits~Komi Republits~Respublika Krym~Respublika Mariy El~Respublika Mordoviya~Sakha (Yakutiya) Republits~Respublika Severnaya Osetiya-Alaniya~Respublika Tatarstan~Tyva Republits~Respublika Udmurtiya~Khakasiya Republits~Rostovskaya oblast'~Ryazanskaya oblast'~Samarskaya oblast'~gorod Sankt-Peterburg~Saratovskaya oblast'~Sakhalinskaya oblast'~Sverdlovskaya oblast'~gorod Sevastopol'~Smolenskaya oblast'~Stavropolskiy kray~Tambovskaya oblast'~Tverskaya oblast'~Tomskaya oblast'~Tulskaya oblast'~Tyumenskaya oblast'~Ulyanovskaya oblast'~Khabarovskiy kray~Khanty-Mansiyskiy avtonomnyy okrug~Chelyabinskaya oblast'~Chechenskaya Republits~Chuvashia~Chukotskiy~Yamalo-Nenetskiy~Yaroslavskaya oblast'",
"sub_keys": "Алтайский край~Амурская область~Архангельская область~Астраханская область~Белгородская область~Брянская область~Владимирская область~Волгоградская область~Вологодская область~Воронежская область~Еврейская автономная область~Забайкальский край~Ивановская область~Иркутская область~Кабардино-Балкарская Республика~Калининградская область~Калужская область~Камчатский край~Карачаево-Черкесская Республика~Кемеровская область~Кировская область~Костромская область~Краснодарский край~Красноярский край~Курганская область~Курская область~Ленинградская область~Липецкая область~Магаданская область~город Москва~Московская область~Мурманская область~Ненецкий автономный округ~Нижегородская область~Новгородская область~Новосибирская область~Омская область~Оренбургская область~Орловская область~Пензенская область~Пермский край~Приморский край~Псковская область~Республика Адыгея~Республика Алтай~Республика Башкортостан~Республика Бурятия~Республика Дагестан~Республика Ингушетия~Республика Калмыкия~Республика Карелия~Республика Коми~Автономна Республіка Крим~Республика Марий Эл~Республика Мордовия~Республика Саха (Якутия)~Республика Северная Осетия-Алания~Республика Татарстан~Республика Тыва~Республика Удмуртия~Республика Хакасия~Ростовская область~Рязанская область~Самарская область~город Санкт-Петербург~Саратовская область~Сахалинская область~Свердловская область~город Севастополь~Смоленская область~Ставропольский край~Тамбовская область~Тверская область~Томская область~Тульская область~Тюменская область~Ульяновская область~Хабаровский край~Ханты-Мансийский автономный округ~Челябинская область~Чеченская Республика~Чувашская Республика~Чукотский автономный округ~Ямало-Ненецкий автономный округ~Ярославская область",
"key": "RU",
"sub_isoids": "ALT~AMU~ARK~AST~BEL~BRY~VLA~VGG~VLG~VOR~YEV~ZAB~IVA~IRK~KB~KGD~KLU~KAM~KC~KEM~KIR~KOS~KDA~KYA~KGN~KRS~LEN~LIP~MAG~MOW~MOS~MUR~NEN~NIZ~NGR~NVS~OMS~ORE~ORL~PNZ~PER~PRI~PSK~AD~AL~BA~BU~DA~IN~KL~KR~KO~~ME~MO~SA~SE~TA~TY~UD~KK~ROS~RYA~SAM~SPE~SAR~SAK~SVE~~SMO~STA~TAM~TVE~TOM~TUL~TYU~ULY~KHA~KHM~CHE~CE~CU~CHU~YAN~YAR",
"posturl": "http://info.russianpost.ru/servlet/department",
"fmt": "%N%n%O%n%A%n%C%n%S%n%Z",
"sub_names": "Алтайский край~Амурская область~Архангельская область~Астраханская область~Белгородская область~Брянская область~Владимирская область~Волгоградская область~Вологодская область~Воронежская область~Еврейская автономная область~Забайкальский край~Ивановская область~Иркутская область~Кабардино-Балкарская Республика~Калининградская область~Калужская область~Камчатский край~Карачаево-Черкесская Республика~Кемеровская область~Кировская область~Костромская область~Краснодарский край~Красноярский край~Курганская область~Курская область~Ленинградская область~Липецкая область~Магаданская область~Москва~Московская область~Мурманская область~Ненецкий автономный округ~Нижегородская область~Новгородская область~Новосибирская область~Омская область~Оренбургская область~Орловская область~Пензенская область~Пермский край~Приморский край~Псковская область~Республика Адыгея~Республика Алтай~Республика Башкортостан~Республика Бурятия~Республика Дагестан~Республика Ингушетия~Республика Калмыкия~Республика Карелия~Республика Коми~Республика Крым~Республика Марий Эл~Республика Мордовия~Республика Саха (Якутия)~Республика Северная Осетия-Алания~Республика Татарстан~Республика Тыва~Республика Удмуртия~Республика Хакасия~Ростовская область~Рязанская область~Самарская область~Санкт-Петербург~Саратовская область~Сахалинская область~Свердловская область~Севастополь~Смоленская область~Ставропольский край~Тамбовская область~Тверская область~Томская область~Тульская область~Тюменская область~Ульяновская область~Хабаровский край~Ханты-Мансийский автономный округ~Челябинская область~Чеченская Республика~Чувашская Республика~Чукотский автономный округ~Ямало-Ненецкий автономный округ~Ярославская область",
"name": "RUSSIAN FEDERATION"
},
{
"upper": "AC",
"id": "data/RW",
"key": "RW",
"name": "RWANDA"
},
{
"zipex": "11564,11187,11142",
"name": "SAUDI ARABIA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%C %Z",
"key": "SA",
"id": "data/SA"
},
{
"id": "data/SB",
"key": "SB",
"name": "SOLOMON ISLANDS"
},
{
"upper": "S",
"name": "SEYCHELLES",
"fmt": "%N%n%O%n%A%n%C%n%S",
"state_name_type": "island",
"key": "SC",
"id": "data/SC"
},
{
"postprefix": "SE-",
"zipex": "11455,12345,10500",
"key": "SE",
"zip": "\\d{3} ?\\d{2}",
"require": "ACZ",
"id": "data/SE",
"posturl": "http://www.posten.se/sv/Kundservice/Sidor/Sok-postnummer-resultat.aspx",
"locality_name_type": "post_town",
"fmt": "%O%n%N%n%A%nSE-%Z %C",
"name": "SWEDEN"
},
{
"zipex": "546080,308125,408600",
"key": "SG",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%nSINGAPORE %Z",
"id": "data/SG",
"posturl": "https://www.singpost.com/find-postal-code",
"require": "AZ",
"name": "REP. OF SINGAPORE"
},
{
"upper": "CZ",
"zipex": "STHL 1ZZ",
"name": "SAINT HELENA",
"zip": "(?:ASCN|STHL) 1ZZ",
"require": "ACZ",
"id": "data/SH",
"key": "SH",
"fmt": "%N%n%O%n%A%n%C%n%Z"
},
{
"postprefix": "SI-",
"zipex": "4000,1001,2500",
"name": "SLOVENIA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%nSI- %Z %C",
"key": "SI",
"id": "data/SI"
},
{
"zipex": "9170",
"key": "SJ",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/SJ",
"posturl": "http://epab.posten.no/",
"locality_name_type": "post_town",
"require": "ACZ",
"name": "SVALBARD AND JAN MAYEN ISLANDS"
},
{
"zipex": "010 01,023 14,972 48,921 01,975 99",
"key": "SK",
"zip": "\\d{3} ?\\d{2}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://psc.posta.sk",
"id": "data/SK",
"name": "SLOVAKIA"
},
{
"id": "data/SL",
"key": "SL",
"name": "SIERRA LEONE"
},
{
"zipex": "47890,47891,47895,47899",
"key": "SM",
"zip": "4789\\d",
"fmt": "%N%n%O%n%A%n%Z %C",
"id": "data/SM",
"posturl": "http://www.poste.it/online/cercacap/",
"require": "AZ",
"name": "SAN MARINO"
},
{
"zipex": "12500,46024,16556,10000",
"name": "SENEGAL",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "SN",
"id": "data/SN"
},
{
"lang": "so",
"upper": "ACS",
"zipex": "JH 09010,AD 11010",
"name": "SOMALIA",
"zip": "[A-Z]{2} ?\\d{5}",
"require": "ACS",
"id": "data/SO",
"languages": "so",
"sub_keys": "AD~BK~BN~BR~BY~GG~GD~HR~JD~JH~MD~NG~SG~SD~SH~SL~TG~WG",
"key": "SO",
"sub_isoids": "AW~BK~BN~BR~BY~GA~GE~HI~JD~JH~MU~NU~SA~SD~SH~SO~TO~WO",
"fmt": "%N%n%O%n%A%n%C, %S %Z",
"sub_names": "Awdal~Bakool~Banaadir~Bari~Bay~Galguduud~Gedo~Hiiraan~Jubbada Dhexe~Jubbada Hoose~Mudug~Nugaal~Sanaag~Shabeellaha Dhexe~Shabeellaha Hoose~Sool~Togdheer~Woqooyi Galbeed"
},
{
"lang": "nl",
"upper": "AS",
"name": "SURINAME",
"fmt": "%N%n%O%n%A%n%C%n%S",
"languages": "nl",
"sub_keys": "Brokopondo~Commewijne~Coronie~Marowijne~Nickerie~Para~Paramaribo~Saramacca~Sipaliwini~Wanica",
"key": "SR",
"sub_isoids": "BR~CM~CR~MA~NI~PR~PM~SA~SI~WA",
"id": "data/SR"
},
{
"id": "data/SS",
"key": "SS",
"name": "SOUTH SUDAN"
},
{
"id": "data/ST",
"key": "ST",
"name": "SAO TOME AND PRINCIPE"
},
{
"lang": "es",
"upper": "CSZ",
"sub_zipexs": "CP 2101~CP 1201~CP 1301~CP 1401~CP 1501~CP 1601~CP 3101~CP 3201~CP 3301~CP 1101~CP 1701~CP 2201~CP 2301~CP 3401",
"zipex": "CP 1101",
"sub_zips": "CP 21~CP 12~CP 13~CP 14~CP 15~CP 16~CP 31~CP 32~CP 33~CP 11~CP 17~CP 22~CP 23~CP 34",
"zip": "CP [1-3][1-7][0-2]\\d",
"require": "ACS",
"id": "data/SV",
"languages": "es",
"sub_keys": "Ahuachapan~Cabanas~Calatenango~Cuscatlan~La Libertad~La Paz~La Union~Morazan~San Miguel~San Salvador~San Vicente~Santa Ana~Sonsonate~Usulutan",
"key": "SV",
"sub_isoids": "AH~CA~CH~CU~LI~PA~UN~MO~SM~SS~SV~SA~SO~US",
"fmt": "%N%n%O%n%A%n%Z-%C%n%S",
"sub_names": "Ahuachapán~Cabañas~Chalatenango~Cuscatlán~La Libertad~La Paz~La Unión~Morazán~San Miguel~San Salvador~San Vicente~Santa Ana~Sonsonate~Usulután",
"name": "EL SALVADOR"
},
{
"id": "data/SX",
"key": "SX",
"name": "SINT MAARTEN"
},
{
"upper": "ACZ",
"zipex": "H100",
"key": "SZ",
"zip": "[HLMS]\\d{3}",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"posturl": "http://www.sptc.co.sz/swazipost/codes/index.php",
"id": "data/SZ",
"name": "SWAZILAND"
},
{
"zipex": "TDCU 1ZZ",
"name": "TRISTAN DA CUNHA",
"zip": "TDCU 1ZZ",
"fmt": "%N%n%O%n%A%n%C%n%Z",
"key": "TA",
"id": "data/TA"
},
{
"upper": "CZ",
"zipex": "TKCA 1ZZ",
"name": "TURKS AND CAICOS ISLANDS",
"zip": "TKCA 1ZZ",
"require": "ACZ",
"id": "data/TC",
"key": "TC",
"fmt": "%N%n%O%n%A%n%C%n%Z"
},
{
"id": "data/TD",
"key": "TD",
"name": "CHAD"
},
{
"id": "data/TF",
"key": "TF",
"name": "FRENCH SOUTHERN TERRITORIES"
},
{
"id": "data/TG",
"key": "TG",
"name": "TOGO"
},
{
"lang": "th",
"upper": "S",
"zipex": "10150,10210",
"sub_zips": "81~10~71~46~62~40~~22~24~20~17~36~86~57~50~92~23~63~26~73~48~30~80~60~11~96~55~31~12~77~25~94~13~56~82~93~66~65~76~67~54~83~44~49~58~35~95~45~85~21~70~15~52~51~42~33~47~90~91~10~75~74~27~18~16~64~72~84~32~43~39~14~37~41~53~61~34",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%D %C%n%S %Z",
"languages": "th",
"lfmt": "%N%n%O%n%A%n%D, %C%n%S %Z",
"sub_lnames": "Krabi~Bangkok~Kanchanaburi~Kalasin~Kamphaeng Phet~Khon Kaen~Bueng Kan~Chanthaburi~Chachoengsao~Chon Buri~Chai Nat~Chaiyaphum~Chumpon~Chiang Rai~Chiang Mai~Trang~Trat~Tak~Nakhon Nayok~Nakhon Pathom~Nakhon Phanom~Nakhon Ratchasima~Nakhon Si Thammarat~Nakhon Sawan~Nonthaburi~Narathiwat~Nan~Buri Ram~Pathum Thani~Prachuap Khiri Khan~Prachin Buri~Pattani~Phra Nakhon Si Ayutthaya~Phayao~Phang Nga~Phattalung~Phichit~Phitsanulok~Phetchaburi~Phetchabun~Phrae~Phuket~Maha Sarakham~Mukdahan~Mae Hong Son~Yasothon~Yala~Roi Et~Ranong~Rayong~Ratchaburi~Lop Buri~Lampang~Lamphun~Loei~Si Sa Ket~Sakon Nakhon~Songkhla~Satun~Samut Prakan~Samut Songkhram~Samut Sakhon~Sa Kaeo~Saraburi~Sing Buri~Sukhothai~Suphanburi~Surat Thani~Surin~Nong Khai~Nong Bua Lam Phu~Ang Thong~Amnat Charoen~Udon Thani~Uttaradit~Uthai Thani~Ubon Ratchathani",
"sub_keys": "กระบี่~กรุงเทพมหานคร~กาญจนบุรี~กาฬสินธุ์~กำแพงเพชร~ขอนแก่น~จังหวัด บึงกาฬ~จันทบุรี~ฉะเชิงเทรา~ชลบุรี~ชัยนาท~ชัยภูมิ~ชุมพร~เชียงราย~เชียงใหม่~ตรัง~ตราด~ตาก~นครนายก~นครปฐม~นครพนม~นครราชสีมา~นครศรีธรรมราช~นครสวรรค์~นนทบุรี~นราธิวาส~น่าน~บุรีรัมย์~ปทุมธานี~ประจวบคีรีขันธ์~ปราจีนบุรี~ปัตตานี~พระนครศรีอยุธยา~พะเยา~พังงา~พัทลุง~พิจิตร~พิษณุโลก~เพชรบุรี~เพชรบูรณ์~แพร่~ภูเก็ต~มหาสารคาม~มุกดาหาร~แม่ฮ่องสอน~ยโสธร~ยะลา~ร้อยเอ็ด~ระนอง~ระยอง~ราชบุรี~ลพบุรี~ลำปาง~ลำพูน~เลย~ศรีสะเกษ~สกลนคร~สงขลา~สตูล~สมุทรปราการ~สมุทรสงคราม~สมุทรสาคร~สระแก้ว~สระบุรี~สิงห์บุรี~สุโขทัย~สุพรรณบุรี~สุราษฎร์ธานี~สุรินทร์~หนองคาย~หนองบัวลำภู~อ่างทอง~อำนาจเจริญ~อุดรธานี~อุตรดิตถ์~อุทัยธานี~อุบลราชธานี",
"key": "TH",
"sub_isoids": "81~10~71~46~62~40~38~22~24~20~18~36~86~57~50~92~23~63~26~73~48~30~80~60~12~96~55~31~13~77~25~94~14~56~82~93~66~65~76~67~54~83~44~49~58~35~95~45~85~21~70~16~52~51~42~33~47~90~91~11~75~74~27~19~17~64~72~84~32~43~39~15~37~41~53~61~34",
"id": "data/TH",
"name": "THAILAND"
},
{
"zipex": "735450,734025",
"name": "TAJIKISTAN",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "TJ",
"id": "data/TJ"
},
{
"id": "data/TK",
"key": "TK",
"name": "TOKELAU"
},
{
"id": "data/TL",
"key": "TL",
"name": "TIMOR-LESTE"
},
{
"zipex": "744000",
"name": "TURKMENISTAN",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "TM",
"id": "data/TM"
},
{
"zipex": "1002,8129,3100,1030",
"key": "TN",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"posturl": "http://www.poste.tn/codes.php",
"id": "data/TN",
"name": "TUNISIA"
},
{
"id": "data/TO",
"key": "TO",
"name": "TONGA"
},
{
"lang": "tr",
"zipex": "01960,06101",
"posturl": "http://postakodu.ptt.gov.tr/",
"zip": "\\d{5}",
"require": "ACZ",
"id": "data/TR",
"languages": "tr",
"locality_name_type": "district",
"sub_keys": "Adana~Adıyaman~Afyon~Ağrı~Aksaray~Amasya~Ankara~Antalya~Ardahan~Artvin~Aydın~Balıkesir~Bartın~Batman~Bayburt~Bilecik~Bingöl~Bitlis~Bolu~Burdur~Bursa~Çanakkale~Çankırı~Çorum~Denizli~Diyarbakır~Düzce~Edirne~Elazığ~Erzincan~Erzurum~Eskişehir~Gaziantep~Giresun~Gümüşhane~Hakkari~Hatay~Iğdır~Isparta~İstanbul~İzmir~Kahramanmaraş~Karabük~Karaman~Kars~Kastamonu~Kayseri~Kırıkkale~Kırklareli~Kırşehir~Kilis~Kocaeli~Konya~Kütahya~Malatya~Manisa~Mardin~Mersin~Muğla~Muş~Nevşehir~Niğde~Ordu~Osmaniye~Rize~Sakarya~Samsun~Siirt~Sinop~Sivas~Şanlıurfa~Şırnak~Tekirdağ~Tokat~Trabzon~Tunceli~Uşak~Van~Yalova~Yozgat~Zonguldak",
"key": "TR",
"sub_isoids": "01~02~03~04~68~05~06~07~75~08~09~10~74~72~69~11~12~13~14~15~16~17~18~19~20~21~81~22~23~24~25~26~27~28~29~30~31~76~32~34~35~46~78~70~36~37~38~71~39~40~79~41~42~43~44~45~47~33~48~49~50~51~52~80~53~54~55~56~57~58~63~73~59~60~61~62~64~65~77~66~67",
"fmt": "%N%n%O%n%A%n%Z %C/%S",
"name": "TURKEY"
},
{
"id": "data/TT",
"key": "TT",
"name": "TRINIDAD AND TOBAGO"
},
{
"lang": "tyv",
"upper": "ACS",
"name": "TUVALU",
"fmt": "%N%n%O%n%A%n%C%n%S",
"state_name_type": "island",
"languages": "tyv",
"sub_keys": "Funafuti~Nanumanga~Nanumea~Niulakita~Niutao~Nui~Nukufetau~Nukulaelae~Vaitupu",
"key": "TV",
"sub_isoids": "FUN~NMG~NMA~~NIT~NUI~NKF~NKL~VAI",
"id": "data/TV"
},
{
"lang": "zh-Hant",
"sub_zipexs": "400,408,411,439~100,119~950,966~700,745~260,272~970,983~890,896~540,558~900,947~350,369~320,338~800,815,817,852~200,206~209,212~630,655~207,208,220,253~~302,315~~602,625~500,530~880,885",
"zipex": "104,106,10603,40867",
"sub_zips": "4[0-3]~1[01]~9[56]~7[0-4]~2[67]~9[78]~89~5[45]~9[0-4]~3[56]~3[23]~8[02-5]|81[1-579]~20[0-6]~209|21[012]~6[3-5]~20[78]|2[2345]~300~30[2-8]|31~600~60[1-9]|6[12]~5[0123]~88",
"zip": "\\d{3}(?:\\d{2})?",
"sub_mores": "true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true",
"require": "ACSZ",
"state_name_type": "county",
"id": "data/TW",
"languages": "zh-Hant",
"lfmt": "%N%n%O%n%A%n%C, %S %Z",
"sub_lnames": "Taichung City~Taipei City~Taitung County~Tainan City~Yilan County~Hualien County~Kinmen County~Nantou County~Pingtung County~Miaoli County~Taoyuan City~Kaohsiung City~Keelung City~Lienchiang County~Yunlin County~New Taipei City~Hsinchu City~Hsinchu County~Chiayi City~Chiayi County~Changhua County~Penghu County",
"sub_keys": "台中市~台北市~台東縣~台南市~宜蘭縣~花蓮縣~金門縣~南投縣~屏東縣~苗栗縣~桃園市~高雄市~基隆市~連江縣~雲林縣~新北市~新竹市~新竹縣~嘉義市~嘉義縣~彰化縣~澎湖縣",
"key": "TW",
"sub_isoids": "TXG~TPE~TTT~TNN~ILA~HUA~~NAN~PIF~MIA~TAO~KHH~KEE~~YUN~NWT~HSZ~HSQ~CYI~CYQ~CHA~PEN",
"posturl": "http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190102",
"fmt": "%Z%n%S%C%n%A%n%O%n%N",
"name": "TAIWAN"
},
{
"zipex": "6090,34413",
"name": "TANZANIA (UNITED REP.)",
"zip": "\\d{4,5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "TZ",
"id": "data/TZ"
},
{
"lang": "uk",
"zipex": "15432,01055,01001",
"sub_zips": "9[5-8]~2[1-4]~4[3-5]~49|5[0-3]~8[3-7]~1[0-3]~8[89]|90~69|7[0-2]~7[6-8]~0[1-6]~0[7-9]~2[5-8]~9[1-4]~79|8[0-2]~5[4-7]~6[5-8]~3[6-9]~3[3-5]~99~4[0-2]~4[6-8]~6[1-4]~7[3-5]~29|3[0-2]~1[89]|20~5[89]|60~1[4-7]",
"zip": "\\d{5}",
"require": "ACSZ",
"state_name_type": "oblast",
"id": "data/UA",
"languages": "uk",
"lfmt": "%N%n%O%n%A%n%C%n%S%n%Z",
"sub_lnames": "Crimea~Vinnyts'ka oblast~Volyns'ka oblast~Dnipropetrovsk oblast~Donetsk oblast~Zhytomyrs'ka oblast~Zakarpats'ka oblast~Zaporiz'ka oblast~Ivano-Frankivs'ka oblast~Kyiv city~Kiev oblast~Kirovohrads'ka oblast~Luhans'ka oblast~Lviv oblast~Mykolaivs'ka oblast~Odessa oblast~Poltavs'ka oblast~Rivnens'ka oblast~Sevastopol' city~Sums'ka oblast~Ternopil's'ka oblast~Kharkiv oblast~Khersons'ka oblast~Khmel'nyts'ka oblast~Cherkas'ka oblast~Chernivets'ka oblast~Chernihivs'ka oblast",
"sub_keys": "Автономна Республіка Крим~Вінницька область~Волинська область~Дніпропетровська область~Донецька область~Житомирська область~Закарпатська область~Запорізька область~Івано-Франківська область~місто Київ~Київська область~Кіровоградська область~Луганська область~Львівська область~Миколаївська область~Одеська область~Полтавська область~Рівненська область~місто Севастополь~Сумська область~Тернопільська область~Харківська область~Херсонська область~Хмельницька область~Черкаська область~Чернівецька область~Чернігівська область",
"key": "UA",
"posturl": "http://services.ukrposhta.com/postindex_new/",
"fmt": "%N%n%O%n%A%n%C%n%S%n%Z",
"sub_names": "Автономна Республіка Крим~Вінницька область~Волинська область~Дніпропетровська область~Донецька область~Житомирська область~Закарпатська область~Запорізька область~Івано-Франківська область~Київ~Київська область~Кіровоградська область~Луганська область~Львівська область~Миколаївська область~Одеська область~Полтавська область~Рівненська область~Севастополь~Сумська область~Тернопільська область~Харківська область~Херсонська область~Хмельницька область~Черкаська область~Чернівецька область~Чернігівська область",
"name": "UKRAINE"
},
{
"id": "data/UG",
"key": "UG",
"name": "UGANDA"
},
{
"upper": "ACNOS",
"zipex": "96898",
"key": "UM",
"zip": "96898",
"zip_name_type": "zip",
"require": "ACS",
"state_name_type": "state",
"id": "data/UM",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "UNITED STATES MINOR OUTLYING ISLANDS"
},
{
"lang": "en",
"upper": "CS",
"sub_zipexs": "35000,36999~99500,99999~96799~85000,86999~71600,72999~34000,34099~09000,09999~96200,96699~90000,96199~80000,81999~06000,06999~19700,19999~20000,56999~32000,34999~30000,39901~96910,96932~96700,96899~83200,83999~60000,62999~46000,47999~50000,52999~66000,67999~40000,42799~70000,71599~03900,04999~96960,96979~20600,21999~01000,05544~48000,49999~96941,96944~55000,56799~38600,39799~63000,65999~59000,59999~68000,69999~88900,89999~03000,03899~07000,08999~87000,88499~10000,00544~27000,28999~58000,58999~96950,96952~43000,45999~73000,74999~97000,97999~96940~15000,19699~00600,00999~02800,02999~29000,29999~57000,57999~37000,38599~75000,73344~84000,84999~05000,05999~00800,00899~20100,24699~98000,99499~24700,26999~53000,54999~82000,83414",
"zipex": "95014,22162-1010",
"sub_zips": "3[56]~99[5-9]~96799~8[56]~71[6-9]|72~340~09~96[2-6]~9[0-5]|96[01]~8[01]~06~19[7-9]~20[02-5]|569~3[23]|34[1-9]~3[01]|398|39901~969([1-2]\\d|3[12])~967[0-8]|9679[0-8]|968~83[2-9]~6[0-2]~4[67]~5[0-2]~6[67]~4[01]|42[0-7]~70|71[0-5]~039|04~969[67]~20[6-9]|21~01|02[0-7]|05501|05544~4[89]~9694[1-4]~55|56[0-7]~38[6-9]|39[0-7]~6[3-5]~59~6[89]~889|89~03[0-8]~0[78]~87|88[0-4]~1[0-4]|06390|00501|00544~2[78]~58~9695[0-2]~4[3-5]~7[34]~97~969(39|40)~1[5-8]|19[0-6]~00[679]~02[89]~29~57~37|38[0-5]~7[5-9]|885|73301|73344~84~05~008~201|2[23]|24[0-6]~98|99[0-4]~24[7-9]|2[56]~5[34]~82|83[01]|83414",
"zip": "(\\d{5})(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/US",
"languages": "en",
"sub_keys": "AL~AK~AS~AZ~AR~AA~AE~AP~CA~CO~CT~DE~DC~FL~GA~GU~HI~ID~IL~IN~IA~KS~KY~LA~ME~MH~MD~MA~MI~FM~MN~MS~MO~MT~NE~NV~NH~NJ~NM~NY~NC~ND~MP~OH~OK~OR~PW~PA~PR~RI~SC~SD~TN~TX~UT~VT~VI~VA~WA~WV~WI~WY",
"key": "US",
"posturl": "https://tools.usps.com/go/ZipLookupAction!input.action",
"fmt": "%N%n%O%n%A%n%C, %S %Z",
"sub_names": "Alabama~Alaska~American Samoa~Arizona~Arkansas~Armed Forces (AA)~Armed Forces (AE)~Armed Forces (AP)~California~Colorado~Connecticut~Delaware~District of Columbia~Florida~Georgia~Guam~Hawaii~Idaho~Illinois~Indiana~Iowa~Kansas~Kentucky~Louisiana~Maine~Marshall Islands~Maryland~Massachusetts~Michigan~Micronesia~Minnesota~Mississippi~Missouri~Montana~Nebraska~Nevada~New Hampshire~New Jersey~New Mexico~New York~North Carolina~North Dakota~Northern Mariana Islands~Ohio~Oklahoma~Oregon~Palau~Pennsylvania~Puerto Rico~Rhode Island~South Carolina~South Dakota~Tennessee~Texas~Utah~Vermont~Virgin Islands~Virginia~Washington~West Virginia~Wisconsin~Wyoming",
"name": "UNITED STATES"
},
{
"lang": "es",
"upper": "CS",
"zipex": "11600",
"sub_zips": "55~9[01]|1[456]~37~70|75204~97~85~94|9060|97005~30~20~1|91600~60~65|60002~40~27~50~80~75|70003~45~33|30203|30204|30302|37007",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C %S",
"languages": "es",
"sub_keys": "Artigas~Canelones~Cerro Largo~Colonia~Durazno~Flores~Florida~Lavalleja~Maldonado~Montevideo~Paysandú~Río Negro~Rivera~Rocha~Salto~San José~Soriano~Tacuarembó~Treinta y Tres",
"key": "UY",
"sub_isoids": "AR~CA~CL~CO~DU~FS~FD~LA~MA~MO~PA~RN~RV~RO~SA~SJ~SO~TA~TT",
"posturl": "http://www.correo.com.uy/index.asp?codPag=codPost&switchMapa=codPost",
"id": "data/UY",
"name": "URUGUAY"
},
{
"upper": "CS",
"zipex": "702100,700000",
"key": "UZ",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%Z %C%n%S",
"posturl": "http://www.pochta.uz/ru/uslugi/indexsearch.html",
"id": "data/UZ",
"name": "UZBEKISTAN"
},
{
"zipex": "00120",
"name": "VATICAN",
"zip": "00120",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "VA",
"id": "data/VA"
},
{
"zipex": "VC0100,VC0110,VC0400",
"key": "VC",
"zip": "VC\\d{4}",
"fmt": "%N%n%O%n%A%n%C %Z",
"posturl": "http://www.svgpost.gov.vc/?option=com_content&view=article&id=3&Itemid=16",
"id": "data/VC",
"name": "SAINT VINCENT AND THE GRENADINES (ANTILLES)"
},
{
"lang": "es",
"upper": "CS",
"zipex": "1010,3001,8011,1020",
"posturl": "http://www.ipostel.gob.ve/index.php/oficinas-postales",
"zip": "\\d{4}",
"require": "ACS",
"state_name_type": "state",
"id": "data/VE",
"languages": "es",
"sub_keys": "Amazonas~Anzoátegui~Apure~Aragua~Barinas~Bolívar~Carabobo~Cojedes~Delta Amacuro~Dependencias Federales~Distrito Federal~Falcón~Guárico~Lara~Mérida~Miranda~Monagas~Nueva Esparta~Portuguesa~Sucre~Táchira~Trujillo~Vargas~Yaracuy~Zulia",
"key": "VE",
"sub_isoids": "Z~B~C~D~E~F~G~H~Y~W~A~I~J~K~L~M~N~O~P~R~S~T~X~U~V",
"fmt": "%N%n%O%n%A%n%C %Z, %S",
"name": "VENEZUELA"
},
{
"zipex": "VG1110,VG1150,VG1160",
"name": "VIRGIN ISLANDS (BRITISH)",
"zip": "VG\\d{4}",
"require": "A",
"id": "data/VG",
"key": "VG",
"fmt": "%N%n%O%n%A%n%C%n%Z"
},
{
"upper": "ACNOS",
"zipex": "00802-1222,00850-9802",
"key": "VI",
"zip": "(008(?:(?:[0-4]\\d)|(?:5[01])))(?:[ \\-](\\d{4}))?",
"zip_name_type": "zip",
"require": "ACSZ",
"state_name_type": "state",
"id": "data/VI",
"posturl": "http://zip4.usps.com/zip4/welcome.jsp",
"fmt": "%N%n%O%n%A%n%C %S %Z",
"name": "VIRGIN ISLANDS (U.S.)"
},
{
"lang": "vi",
"zipex": "119415,136065,720344",
"posturl": "http://postcode.vnpost.vn/services/search.aspx",
"zip": "\\d{6}",
"fmt": "%N%n%O%n%A%n%C%n%S %Z",
"languages": "vi",
"lfmt": "%N%n%O%n%A%n%C%n%S %Z",
"sub_lnames": "An Giang Province~Ba Ria-Vung Tau Province~Bac Lieu Province~Bac Giang Province~Bac Kan Province~Bac Ninh Province~Ben Tre Province~Binh Duong Province~Binh Dinh Province~Binh Phuoc Province~Binh Thuan Province~Ca Mau Province~Cao Bang Province~Can Tho City~Da Nang City~Dak Lak Province~Dak Nong Province~Dien Bien Province~Dong Nai Province~Dong Thap Province~Gia Lai Province~Ha Giang Province~Ha Nam Province~Hanoi City~Ha Tinh Province~Hai Duong Province~Haiphong City~Hau Giang Province~Hoa Binh Province~Hung Yen Province~Khanh Hoa Province~Kien Giang Province~Kon Tum Province~Lai Chau Province~Lang Song Province~Lao Cai Province~Lam Dong Province~Long An Province~Nam Dinh Province~Nghe An Province~Nanh Binh Province~Ninh Thuan Province~Phu Tho Province~Phu Yen Province~Quang Binh Province~Quang Nam Province~Quang Ngai Province~Quang Ninh Province~Quang Tri Province~Soc Trang Province~Son La Province~Tay Ninh Province~Thai Binh Province~Thai Nguyen Province~Thanh Hoa Province~Ho Chi Minh City~Thua Thien-Hue Province~Tien Giang Province~Tra Vinh Province~Tuyen Quang Province~Vinh Long Province~Vinh Phuc Province~Yen Bai Province",
"sub_keys": "An Giang~Bà Rịa–Vũng Tàu~Bạc Liêu~Bắc Giang~Bắc Kạn~Bắc Ninh~Bến Tre~Bình Dương~Bình Định~Bình Phước~Bình Thuận~Cà Mau~Cao Bằng~Cần Thơ~Đà Nẵng~Đắk Lắk~Đăk Nông~Điện Biên~Đồng Nai~Đồng Tháp~Gia Lai~Hà Giang~Hà Nam~Hà Nội~Hà Tĩnh~Hải Dương~Hải Phòng~Hậu Giang~Hòa Bình~Hưng Yên~Khánh Hòa~Kiên Giang~Kon Tum~Lai Châu~Lạng Sơn~Lào Cai~Lâm Đồng~Long An~Nam Định~Nghệ An~Ninh Bình~Ninh Thuận~Phú Thọ~Phú Yên~Quảng Bình~Quảng Nam~Quảng Ngãi~Quảng Ninh~Quảng Trị~Sóc Trăng~Sơn La~Tây Ninh~Thái Bình~Thái Nguyên~Thanh Hóa~Thành phố Hồ Chí Minh~Thừa Thiên–Huế~Tiền Giang~Trà Vinh~Tuyên Quang~Vĩnh Long~Vĩnh Phúc~Yên Bái",
"key": "VN",
"sub_isoids": "44~43~55~54~53~56~50~57~31~58~40~59~04~CT~DN~33~72~71~39~45~30~03~63~HN~23~61~HP~73~14~66~34~47~28~01~09~02~35~41~67~22~18~36~68~32~24~27~29~13~25~52~05~37~20~69~21~SG~26~46~51~07~49~70~06",
"id": "data/VN",
"name": "VIET NAM"
},
{
"id": "data/VU",
"key": "VU",
"name": "VANUATU"
},
{
"upper": "ACX",
"zipex": "98600",
"name": "WALLIS AND FUTUNA ISLANDS",
"zip": "986\\d{2}",
"require": "ACZ",
"id": "data/WF",
"key": "WF",
"fmt": "%O%n%N%n%A%n%Z %C %X"
},
{
"id": "data/WS",
"key": "WS",
"name": "SAMOA"
},
{
"zipex": "10000",
"name": "KOSOVO",
"zip": "[1-7]\\d{4}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "XK",
"id": "data/XK"
},
{
"id": "data/YE",
"key": "YE",
"name": "YEMEN"
},
{
"upper": "ACX",
"zipex": "97600",
"name": "MAYOTTE",
"zip": "976\\d{2}",
"require": "ACZ",
"id": "data/YT",
"key": "YT",
"fmt": "%O%n%N%n%A%n%Z %C %X"
},
{
"zipex": "0083,1451,0001",
"key": "ZA",
"zip": "\\d{4}",
"fmt": "%N%n%O%n%A%n%D%n%C%n%Z",
"id": "data/ZA",
"posturl": "https://www.postoffice.co.za/contactus/postalcode.html",
"require": "ACZ",
"name": "SOUTH AFRICA"
},
{
"zipex": "50100,50101",
"name": "ZAMBIA",
"zip": "\\d{5}",
"fmt": "%N%n%O%n%A%n%Z %C",
"key": "ZM",
"id": "data/ZM"
},
{
"id": "data/ZW",
"key": "ZW",
"name": "ZIMBABWE"
}
]
================================================
FILE: Scripts/Regions.swift
================================================
import Foundation
print(Locale.isoRegionCodes.joined(separator: "\n"))
================================================
FILE: Sources/PostalCodeValidator/PostalCodeValidator.swift
================================================
// This file was automatically generated and should not be edited.
import Foundation
/// A validator for postal codes.
public final class PostalCodeValidator {
/**
* A set of available region codes.
*
* Each element of the returned set is an two-letter
* ISO 3166-2 region code
* (for example, "US" for the United States of America).
*/
public class var isoRegionCodes: Set<String> {
return Set(patternsByRegion.keys)
}
private static let patternsByRegion: [String: String] = [
"AC": #"ASCN 1ZZ"#,
"AD": #"AD[1-7]0\d"#,
"AE": #"AD[1-7]0\d"#,
"AF": #"\d{4}"#,
"AG": #"\d{4}"#,
"AI": #"(?:AI-)?2640"#,
"AL": #"\d{4}"#,
"AM": #"(?:37)?\d{4}"#,
"AO": #"(?:37)?\d{4}"#,
"AQ": #"(?:37)?\d{4}"#,
"AR": #"((?:[A-HJ-NP-Z])?\d{4})([A-Z]{3})?"#,
"AS": #"(96799)(?:[ \-](\d{4}))?"#,
"AT": #"\d{4}"#,
"AU": #"\d{4}"#,
"AW": #"\d{4}"#,
"AX": #"22\d{3}"#,
"AZ": #"\d{4}"#,
"BA": #"\d{5}"#,
"BB": #"BB\d{5}"#,
"BD": #"\d{4}"#,
"BE": #"\d{4}"#,
"BF": #"\d{4}"#,
"BG": #"\d{4}"#,
"BH": #"(?:\d|1[0-2])\d{2}"#,
"BI": #"(?:\d|1[0-2])\d{2}"#,
"BJ": #"(?:\d|1[0-2])\d{2}"#,
"BL": #"9[78][01]\d{2}"#,
"BM": #"[A-Z]{2} ?[A-Z0-9]{2}"#,
"BN": #"[A-Z]{2} ?\d{4}"#,
"BO": #"[A-Z]{2} ?\d{4}"#,
"BQ": #"[A-Z]{2} ?\d{4}"#,
"BR": #"\d{5}-?\d{3}"#,
"BS": #"\d{5}-?\d{3}"#,
"BT": #"\d{5}"#,
"BV": #"\d{5}"#,
"BW": #"\d{5}"#,
"BY": #"\d{6}"#,
"BZ": #"\d{6}"#,
"CA": #"[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z] ?\d[ABCEGHJ-NPRSTV-Z]\d"#,
"CC": #"6799"#,
"CD": #"6799"#,
"CF": #"6799"#,
"CG": #"6799"#,
"CH": #"\d{4}"#,
"CI": #"\d{4}"#,
"CK": #"\d{4}"#,
"CL": #"\d{7}"#,
"CM": #"\d{7}"#,
"CN": #"\d{6}"#,
"CO": #"\d{6}"#,
"CR": #"\d{4,5}|\d{3}-\d{4}"#,
"CV": #"\d{4}"#,
"CW": #"\d{4}"#,
"CX": #"6798"#,
"CY": #"\d{4}"#,
"CZ": #"\d{3} ?\d{2}"#,
"DE": #"\d{5}"#,
"DJ": #"\d{5}"#,
"DK": #"\d{4}"#,
"DM": #"\d{4}"#,
"DO": #"\d{5}"#,
"DZ": #"\d{5}"#,
"EC": #"\d{6}"#,
"EE": #"\d{5}"#,
"EG": #"\d{5}"#,
"EH": #"\d{5}"#,
"ER": #"\d{5}"#,
"ES": #"\d{5}"#,
"ET": #"\d{4}"#,
"FI": #"\d{5}"#,
"FJ": #"\d{5}"#,
"FK": #"FIQQ 1ZZ"#,
"FM": #"(9694[1-4])(?:[ \-](\d{4}))?"#,
"FO": #"\d{3}"#,
"FR": #"\d{2} ?\d{3}"#,
"GA": #"\d{2} ?\d{3}"#,
"GB": #"GIR ?0AA|(?:(?:AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|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}"#,
"GD": #"GIR ?0AA|(?:(?:AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|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}"#,
"GH": #"GY\d[\dA-Z]? ?\d[ABD-HJLN-UW-Z]{2}"#,
"GI": #"GX11 1AA"#,
"GL": #"39\d{2}"#,
"GM": #"39\d{2}"#,
"GN": #"\d{3}"#,
"GP": #"9[78][01]\d{2}"#,
"GQ": #"9[78][01]\d{2}"#,
"GR": #"\d{3} ?\d{2}"#,
"GS": #"SIQQ 1ZZ"#,
"GT": #"\d{5}"#,
"GU": #"(969(?:[12]\d|3[12]))(?:[ \-](\d{4}))?"#,
"GW": #"\d{4}"#,
"GY": #"\d{4}"#,
"HK": #"\d{4}"#,
"HM": #"\d{4}"#,
"HN": #"\d{5}"#,
"HR": #"\d{5}"#,
"HT": #"\d{4}"#,
"HU": #"\d{4}"#,
"ID": #"\d{5}"#,
"IE": #"[\dA-Z]{3} ?[\dA-Z]{4}"#,
"IL": #"\d{5}(?:\d{2})?"#,
"IM": #"IM\d[\dA-Z]? ?\d[ABD-HJLN-UW-Z]{2}"#,
"IN": #"\d{6}"#,
"IO": #"BBND 1ZZ"#,
"IQ": #"\d{5}"#,
"IR": #"\d{5}-?\d{5}"#,
"IS": #"\d{3}"#,
"IT": #"\d{5}"#,
"JE": #"JE\d[\dA-Z]? ?\d[ABD-HJLN-UW-Z]{2}"#,
"JM": #"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}"#,
"KI": #"\d{5}"#,
"KM": #"\d{5}"#,
"KN": #"\d{5}"#,
"KR": #"\d{5}"#,
"KW": #"\d{5}"#,
"KY": #"KY\d-\d{4}"#,
"KZ": #"\d{6}"#,
"LA": #"\d{5}"#,
"LB": #"(?:\d{4})(?: ?(?:\d{4}))?"#,
"LC": #"(?:\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": #"LV-\d{4}"#,
"LY": #"LV-\d{4}"#,
"MA": #"\d{5}"#,
"MC": #"980\d{2}"#,
"MD": #"\d{4}"#,
"ME": #"8\d{4}"#,
"MF": #"9[78][01]\d{2}"#,
"MG": #"\d{3}"#,
"MH": #"(969[67]\d)(?:[ \-](\d{4}))?"#,
"MK": #"\d{4}"#,
"ML": #"\d{4}"#,
"MM": #"\d{5}"#,
"MN": #"\d{5}"#,
"MO": #"\d{5}"#,
"MP": #"(9695[012])(?:[ \-](\d{4}))?"#,
"MQ": #"9[78]2\d{2}"#,
"MR": #"9[78]2\d{2}"#,
"MS": #"9[78]2\d{2}"#,
"MT": #"[A-Z]{3} ?\d{2,4}"#,
"MU": #"\d{3}(?:\d{2}|[A-Z]{2}\d{3})"#,
"MV": #"\d{5}"#,
"MW": #"\d{5}"#,
"MX": #"\d{5}"#,
"MY": #"\d{5}"#,
"MZ": #"\d{4}"#,
"NA": #"\d{4}"#,
"NC": #"988\d{2}"#,
"NE": #"\d{4}"#,
"NF": #"2899"#,
"NG": #"\d{6}"#,
"NI": #"\d{5}"#,
"NL": #"\d{4} ?[A-Z]{2}"#,
"NO": #"\d{4}"#,
"NP": #"\d{5}"#,
"NR": #"\d{5}"#,
"NU": #"\d{5}"#,
"NZ": #"\d{4}"#,
"OM": #"(?:PC )?\d{3}"#,
"PA": #"(?:PC )?\d{3}"#,
"PE": #"(?:LIMA \d{1,2}|CALLAO 0?\d)|[0-2]\d{4}"#,
"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}))?"#,
"PS": #"(00[679]\d{2})(?:[ \-](\d{4}))?"#,
"PT": #"\d{4}-\d{3}"#,
"PW": #"(969(?:39|40))(?:[ \-](\d{4}))?"#,
"PY": #"\d{4}"#,
"QA": #"\d{4}"#,
"RE": #"9[78]4\d{2}"#,
"RO": #"\d{6}"#,
"RS": #"\d{5,6}"#,
"RU": #"\d{6}"#,
"RW": #"\d{6}"#,
"SA": #"\d{5}"#,
"SB": #"\d{5}"#,
"SC": #"\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}"#,
"SL": #"\d{3} ?\d{2}"#,
"SM": #"4789\d"#,
"SN": #"\d{5}"#,
"SO": #"[A-Z]{2} ?\d{5}"#,
"SR": #"[A-Z]{2} ?\d{5}"#,
"SS": #"[A-Z]{2} ?\d{5}"#,
"ST": #"[A-Z]{2} ?\d{5}"#,
"SV": #"CP [1-3][1-7][0-2]\d"#,
"SX": #"CP [1-3][1-7][0-2]\d"#,
"SZ": #"[HLMS]\d{3}"#,
"TA": #"TDCU 1ZZ"#,
"TC": #"TKCA 1ZZ"#,
"TD": #"TKCA 1ZZ"#,
"TF": #"TKCA 1ZZ"#,
"TG": #"TKCA 1ZZ"#,
"TH": #"\d{5}"#,
"TJ": #"\d{6}"#,
"TK": #"\d{6}"#,
"TL": #"\d{6}"#,
"TM": #"\d{6}"#,
"TN": #"\d{4}"#,
"TO": #"\d{4}"#,
"TR": #"\d{5}"#,
"TT": #"\d{5}"#,
"TV": #"\d{5}"#,
"TW": #"\d{3}(?:\d{2})?"#,
"TZ": #"\d{4,5}"#,
"UA": #"\d{5}"#,
"UG": #"\d{5}"#,
"UM": #"96898"#,
"US": #"(\d{5})(?:[ \-](\d{4}))?"#,
"UY": #"\d{5}"#,
"UZ": #"\d{6}"#,
"VA": #"00120"#,
"VC": #"VC\d{4}"#,
"VE": #"\d{4}"#,
"VG": #"VG\d{4}"#,
"VI": #"(008(?:(?:[0-4]\d)|(?:5[01])))(?:[ \-](\d{4}))?"#,
"VN": #"\d{6}"#,
"VU": #"\d{6}"#,
"WF": #"986\d{2}"#,
"WS": #"986\d{2}"#,
"XK": #"[1-7]\d{4}"#,
"YE": #"[1-7]\d{4}"#,
"YT": #"976\d{2}"#,
"ZA": #"\d{4}"#,
"ZM": #"\d{5}"#,
"ZW": #"\d{5}"#,
]
/**
* The two-letter ISO 3166-2 region code
* (for example, "US" for the United States of America).
*/
var regionCode: String
private var regularExpression: NSRegularExpression
/**
* Creates a postal code validator for the specified region.
*
* Returns `nil` if the region isn't supported.
*
* - Parameters:
* - region: A two-letter ISO 3166-2 region code
* (for example, "US" for the United States of America).
*/
public init?(regionCode: String) {
guard let pattern = PostalCodeValidator.patternsByRegion[regionCode],
let regex = try? NSRegularExpression(pattern: #"\A\#(pattern)\Z"#, options: [])
else { return nil }
self.regionCode = regionCode
self.regularExpression = regex
}
/**
* Creates a postal code validator for the region of the specified locale.
*
* Returns `nil` if the locale doesn't have a valid region,
* or the region isn't supported.
*
* - Parameters:
* - locale: The locale whose `regionCode` property is used to determine
* the appropriate postal code validation rules.
*/
public convenience init?(locale: Locale) {
guard let regionCode = locale.regionCode else { return nil }
self.init(regionCode: regionCode)
}
/**
* Returns whether a postal code is valid for the configured region.
*
* - Parameters:
* - postalCode: The postal code.
* - Returns: `true` if valid, otherwise `false`.
*/
public func validate(postalCode: String) -> Bool {
return regularExpression.rangeOfFirstMatch(in: postalCode, options: [], range: NSRange(postalCode.startIndex..<postalCode.endIndex, in: postalCode)).location != NSNotFound
}
}
================================================
FILE: Sources/PostalCodeValidator/PostalCodeValidator.swift.gyb
================================================
% warning = "This file was automatically generated and should not be edited."
// ${warning}
import Foundation
%{
# encoding=utf8
import os
import sys
import json
reload(sys)
sys.setdefaultencoding('utf8')
}%
% with open(os.getcwd() + "/../../Resources/postalData.json") as file:
%{ data = json.load(file) }%
/// A validator for postal codes.
public final class PostalCodeValidator {
/**
* A set of available region codes.
*
* Each element of the returned set is an two-letter
* ISO 3166-2 region code
* (for example, "US" for the United States of America).
*/
public class var isoRegionCodes: Set<String> {
return Set(patternsByRegion.keys)
}
private static let patternsByRegion: [String: String] = [
% for region in data:
% if region:
%{
try:
code = region['key']
pattern = region['zip']
except KeyError:
pass }%
"${code}": #"${pattern}"#,
% end
% end
% end
]
/**
* The two-letter ISO 3166-2 region code
* (for example, "US" for the United States of America).
*/
var regionCode: String
private var regularExpression: NSRegularExpression
/**
* Creates a postal code validator for the specified region.
*
* Returns `nil` if the region isn't supported.
*
* - Parameters:
* - region: A two-letter ISO 3166-2 region code
* (for example, "US" for the United States of America).
*/
public init?(regionCode: String) {
guard let pattern = PostalCodeValidator.patternsByRegion[regionCode],
let regex = try? NSRegularExpression(pattern: #"\A\#(pattern)\Z"#, options: [])
else { return nil }
self.regionCode = regionCode
self.regularExpression = regex
}
/**
* Creates a postal code validator for the region of the specified locale.
*
* Returns `nil` if the locale doesn't have a valid region,
* or the region isn't supported.
*
* - Parameters:
* - locale: The locale whose `regionCode` property is used to determine
* the appropriate postal code validation rules.
*/
public convenience init?(locale: Locale) {
guard let regionCode = locale.regionCode else { return nil }
self.init(regionCode: regionCode)
}
/**
* Returns whether a postal code is valid for the configured region.
*
* - Parameters:
* - postalCode: The postal code.
* - Returns: `true` if valid, otherwise `false`.
*/
public func validate(postalCode: String) -> Bool {
return regularExpression.rangeOfFirstMatch(in: postalCode, options: [], range: NSRange(postalCode.startIndex..<postalCode.endIndex, in: postalCode)).location != NSNotFound
}
}
================================================
FILE: Tests/LinuxMain.swift
================================================
import XCTest
import PostalCodeValidatorTests
var tests = [XCTestCaseEntry]()
tests += PostalCodeValidatorTests.allTests()
XCTMain(tests)
================================================
FILE: Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift
================================================
// This file was automatically generated and should not be edited.
import Foundation
@testable import PostalCodeValidator
import XCTest
final class PostalCodeValidatorTests: XCTestCase {
func testValidateACPostalCode() { // ASCENSION ISLAND
let locale = Locale(identifier: "und-AC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"ASCN 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateADPostalCode() { // ANDORRA
let locale = Locale(identifier: "und-AD")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"AD100"#))
XCTAssertTrue(validator!.validate(postalCode: #"AD501"#))
XCTAssertTrue(validator!.validate(postalCode: #"AD700"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAEPostalCode() { // UNITED ARAB EMIRATES
let locale = Locale(identifier: "und-AE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAFPostalCode() { // AFGHANISTAN
let locale = Locale(identifier: "und-AF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1001"#))
XCTAssertTrue(validator!.validate(postalCode: #"2601"#))
XCTAssertTrue(validator!.validate(postalCode: #"3801"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAGPostalCode() { // ANTIGUA AND BARBUDA
let locale = Locale(identifier: "und-AG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAIPostalCode() { // ANGUILLA
let locale = Locale(identifier: "und-AI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2640"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateALPostalCode() { // ALBANIA
let locale = Locale(identifier: "und-AL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1001"#))
XCTAssertTrue(validator!.validate(postalCode: #"1017"#))
XCTAssertTrue(validator!.validate(postalCode: #"3501"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAMPostalCode() { // ARMENIA
let locale = Locale(identifier: "und-AM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"375010"#))
XCTAssertTrue(validator!.validate(postalCode: #"0002"#))
XCTAssertTrue(validator!.validate(postalCode: #"0010"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAOPostalCode() { // ANGOLA
let locale = Locale(identifier: "und-AO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAQPostalCode() { // ANTARCTICA
let locale = Locale(identifier: "und-AQ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateARPostalCode() { // ARGENTINA
let locale = Locale(identifier: "und-AR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"C1070AAM"#))
XCTAssertTrue(validator!.validate(postalCode: #"C1000WAM"#))
XCTAssertTrue(validator!.validate(postalCode: #"B1000TBU"#))
XCTAssertTrue(validator!.validate(postalCode: #"X5187XAB"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateASPostalCode() { // AMERICAN SAMOA
let locale = Locale(identifier: "und-AS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"96799"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateATPostalCode() { // AUSTRIA
let locale = Locale(identifier: "und-AT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1010"#))
XCTAssertTrue(validator!.validate(postalCode: #"3741"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAUPostalCode() { // AUSTRALIA
let locale = Locale(identifier: "und-AU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2060"#))
XCTAssertTrue(validator!.validate(postalCode: #"3171"#))
XCTAssertTrue(validator!.validate(postalCode: #"6430"#))
XCTAssertTrue(validator!.validate(postalCode: #"4000"#))
XCTAssertTrue(validator!.validate(postalCode: #"4006"#))
XCTAssertTrue(validator!.validate(postalCode: #"3001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAWPostalCode() { // ARUBA
let locale = Locale(identifier: "und-AW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAXPostalCode() { // FINLAND
let locale = Locale(identifier: "und-AX")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"22150"#))
XCTAssertTrue(validator!.validate(postalCode: #"22550"#))
XCTAssertTrue(validator!.validate(postalCode: #"22240"#))
XCTAssertTrue(validator!.validate(postalCode: #"22710"#))
XCTAssertTrue(validator!.validate(postalCode: #"22270"#))
XCTAssertTrue(validator!.validate(postalCode: #"22730"#))
XCTAssertTrue(validator!.validate(postalCode: #"22430"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateAZPostalCode() { // AZERBAIJAN
let locale = Locale(identifier: "und-AZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBAPostalCode() { // BOSNIA AND HERZEGOVINA
let locale = Locale(identifier: "und-BA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"71000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBBPostalCode() { // BARBADOS
let locale = Locale(identifier: "und-BB")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"BB23026"#))
XCTAssertTrue(validator!.validate(postalCode: #"BB22025"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBDPostalCode() { // BANGLADESH
let locale = Locale(identifier: "und-BD")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1340"#))
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBEPostalCode() { // BELGIUM
let locale = Locale(identifier: "und-BE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"4000"#))
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBFPostalCode() { // BURKINA FASO
let locale = Locale(identifier: "und-BF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBGPostalCode() { // BULGARIA (REP.)
let locale = Locale(identifier: "und-BG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertTrue(validator!.validate(postalCode: #"1700"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBHPostalCode() { // BAHRAIN
let locale = Locale(identifier: "und-BH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"317"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBIPostalCode() { // BURUNDI
let locale = Locale(identifier: "und-BI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBJPostalCode() { // BENIN
let locale = Locale(identifier: "und-BJ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBLPostalCode() { // SAINT BARTHELEMY
let locale = Locale(identifier: "und-BL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBMPostalCode() { // BERMUDA
let locale = Locale(identifier: "und-BM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"FL 07"#))
XCTAssertTrue(validator!.validate(postalCode: #"HM GX"#))
XCTAssertTrue(validator!.validate(postalCode: #"HM 12"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBNPostalCode() { // BRUNEI DARUSSALAM
let locale = Locale(identifier: "und-BN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"BT2328"#))
XCTAssertTrue(validator!.validate(postalCode: #"KA1131"#))
XCTAssertTrue(validator!.validate(postalCode: #"BA1511"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBOPostalCode() { // BOLIVIA
let locale = Locale(identifier: "und-BO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBQPostalCode() { // BONAIRE, SINT EUSTATIUS, AND SABA
let locale = Locale(identifier: "und-BQ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBRPostalCode() { // BRAZIL
let locale = Locale(identifier: "und-BR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"40301-110"#))
XCTAssertTrue(validator!.validate(postalCode: #"70002-900"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBSPostalCode() { // BAHAMAS
let locale = Locale(identifier: "und-BS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBTPostalCode() { // BHUTAN
let locale = Locale(identifier: "und-BT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11001"#))
XCTAssertTrue(validator!.validate(postalCode: #"31101"#))
XCTAssertTrue(validator!.validate(postalCode: #"35003"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBVPostalCode() { // BOUVET ISLAND
let locale = Locale(identifier: "und-BV")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBWPostalCode() { // BOTSWANA
let locale = Locale(identifier: "und-BW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBYPostalCode() { // BELARUS
let locale = Locale(identifier: "und-BY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"223016"#))
XCTAssertTrue(validator!.validate(postalCode: #"225860"#))
XCTAssertTrue(validator!.validate(postalCode: #"220050"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateBZPostalCode() { // BELIZE
let locale = Locale(identifier: "und-BZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCAPostalCode() { // CANADA
let locale = Locale(identifier: "und-CA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"H3Z 2Y7"#))
XCTAssertTrue(validator!.validate(postalCode: #"V8X 3X4"#))
XCTAssertTrue(validator!.validate(postalCode: #"T0L 1K0"#))
XCTAssertTrue(validator!.validate(postalCode: #"T0H 1A0"#))
XCTAssertTrue(validator!.validate(postalCode: #"K1A 0B1"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCCPostalCode() { // COCOS (KEELING) ISLANDS
let locale = Locale(identifier: "und-CC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"6799"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCDPostalCode() { // CONGO (DEM. REP.)
let locale = Locale(identifier: "und-CD")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCFPostalCode() { // CENTRAL AFRICAN REPUBLIC
let locale = Locale(identifier: "und-CF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCGPostalCode() { // CONGO (REP.)
let locale = Locale(identifier: "und-CG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCHPostalCode() { // SWITZERLAND
let locale = Locale(identifier: "und-CH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2544"#))
XCTAssertTrue(validator!.validate(postalCode: #"1211"#))
XCTAssertTrue(validator!.validate(postalCode: #"1556"#))
XCTAssertTrue(validator!.validate(postalCode: #"3030"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCIPostalCode() { // COTE D'IVOIRE
let locale = Locale(identifier: "und-CI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCKPostalCode() { // COOK ISLANDS
let locale = Locale(identifier: "und-CK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCLPostalCode() { // CHILE
let locale = Locale(identifier: "und-CL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"8340457"#))
XCTAssertTrue(validator!.validate(postalCode: #"8720019"#))
XCTAssertTrue(validator!.validate(postalCode: #"1230000"#))
XCTAssertTrue(validator!.validate(postalCode: #"8329100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCMPostalCode() { // CAMEROON
let locale = Locale(identifier: "und-CM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCNPostalCode() { // CHINA
let locale = Locale(identifier: "und-CN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"266033"#))
XCTAssertTrue(validator!.validate(postalCode: #"317204"#))
XCTAssertTrue(validator!.validate(postalCode: #"100096"#))
XCTAssertTrue(validator!.validate(postalCode: #"100808"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCOPostalCode() { // COLOMBIA
let locale = Locale(identifier: "und-CO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"111221"#))
XCTAssertTrue(validator!.validate(postalCode: #"130001"#))
XCTAssertTrue(validator!.validate(postalCode: #"760011"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCRPostalCode() { // COSTA RICA
let locale = Locale(identifier: "und-CR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertTrue(validator!.validate(postalCode: #"2010"#))
XCTAssertTrue(validator!.validate(postalCode: #"1001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCVPostalCode() { // CAPE VERDE
let locale = Locale(identifier: "und-CV")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"7600"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCWPostalCode() { // CURACAO
let locale = Locale(identifier: "und-CW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCXPostalCode() { // CHRISTMAS ISLAND
let locale = Locale(identifier: "und-CX")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"6798"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCYPostalCode() { // CYPRUS
let locale = Locale(identifier: "und-CY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2008"#))
XCTAssertTrue(validator!.validate(postalCode: #"3304"#))
XCTAssertTrue(validator!.validate(postalCode: #"1900"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateCZPostalCode() { // CZECH REP.
let locale = Locale(identifier: "und-CZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"100 00"#))
XCTAssertTrue(validator!.validate(postalCode: #"251 66"#))
XCTAssertTrue(validator!.validate(postalCode: #"530 87"#))
XCTAssertTrue(validator!.validate(postalCode: #"110 00"#))
XCTAssertTrue(validator!.validate(postalCode: #"225 99"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateDEPostalCode() { // GERMANY
let locale = Locale(identifier: "und-DE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"26133"#))
XCTAssertTrue(validator!.validate(postalCode: #"53225"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateDJPostalCode() { // DJIBOUTI
let locale = Locale(identifier: "und-DJ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateDKPostalCode() { // DENMARK
let locale = Locale(identifier: "und-DK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"8660"#))
XCTAssertTrue(validator!.validate(postalCode: #"1566"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateDMPostalCode() { // DOMINICA
let locale = Locale(identifier: "und-DM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateDOPostalCode() { // DOMINICAN REP.
let locale = Locale(identifier: "und-DO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11903"#))
XCTAssertTrue(validator!.validate(postalCode: #"10101"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateDZPostalCode() { // ALGERIA
let locale = Locale(identifier: "und-DZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"40304"#))
XCTAssertTrue(validator!.validate(postalCode: #"16027"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateECPostalCode() { // ECUADOR
let locale = Locale(identifier: "und-EC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"090105"#))
XCTAssertTrue(validator!.validate(postalCode: #"092301"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateEEPostalCode() { // ESTONIA
let locale = Locale(identifier: "und-EE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"69501"#))
XCTAssertTrue(validator!.validate(postalCode: #"11212"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateEGPostalCode() { // EGYPT
let locale = Locale(identifier: "und-EG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"12411"#))
XCTAssertTrue(validator!.validate(postalCode: #"11599"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateEHPostalCode() { // WESTERN SAHARA
let locale = Locale(identifier: "und-EH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"70000"#))
XCTAssertTrue(validator!.validate(postalCode: #"72000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateERPostalCode() { // ERITREA
let locale = Locale(identifier: "und-ER")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateESPostalCode() { // SPAIN
let locale = Locale(identifier: "und-ES")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"28039"#))
XCTAssertTrue(validator!.validate(postalCode: #"28300"#))
XCTAssertTrue(validator!.validate(postalCode: #"28070"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateETPostalCode() { // ETHIOPIA
let locale = Locale(identifier: "und-ET")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateFIPostalCode() { // FINLAND
let locale = Locale(identifier: "und-FI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"00550"#))
XCTAssertTrue(validator!.validate(postalCode: #"00011"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateFJPostalCode() { // FIJI
let locale = Locale(identifier: "und-FJ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateFKPostalCode() { // FALKLAND ISLANDS (MALVINAS)
let locale = Locale(identifier: "und-FK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"FIQQ 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateFMPostalCode() { // MICRONESIA (Federated State of)
let locale = Locale(identifier: "und-FM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"96941"#))
XCTAssertTrue(validator!.validate(postalCode: #"96944"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateFOPostalCode() { // FAROE ISLANDS
let locale = Locale(identifier: "und-FO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateFRPostalCode() { // FRANCE
let locale = Locale(identifier: "und-FR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"33380"#))
XCTAssertTrue(validator!.validate(postalCode: #"34092"#))
XCTAssertTrue(validator!.validate(postalCode: #"33506"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGAPostalCode() { // GABON
let locale = Locale(identifier: "und-GA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGBPostalCode() { // UNITED KINGDOM
let locale = Locale(identifier: "und-GB")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"EC1Y 8SY"#))
XCTAssertTrue(validator!.validate(postalCode: #"GIR 0AA"#))
XCTAssertTrue(validator!.validate(postalCode: #"M2 5BQ"#))
XCTAssertTrue(validator!.validate(postalCode: #"M34 4AB"#))
XCTAssertTrue(validator!.validate(postalCode: #"CR0 2YR"#))
XCTAssertTrue(validator!.validate(postalCode: #"DN16 9AA"#))
XCTAssertTrue(validator!.validate(postalCode: #"W1A 4ZZ"#))
XCTAssertTrue(validator!.validate(postalCode: #"EC1A 1HQ"#))
XCTAssertTrue(validator!.validate(postalCode: #"OX14 4PG"#))
XCTAssertTrue(validator!.validate(postalCode: #"BS18 8HF"#))
XCTAssertTrue(validator!.validate(postalCode: #"NR25 7HG"#))
XCTAssertTrue(validator!.validate(postalCode: #"RH6 0NP"#))
XCTAssertTrue(validator!.validate(postalCode: #"BH23 6AA"#))
XCTAssertTrue(validator!.validate(postalCode: #"B6 5BA"#))
XCTAssertTrue(validator!.validate(postalCode: #"SO23 9AP"#))
XCTAssertTrue(validator!.validate(postalCode: #"PO1 3AX"#))
XCTAssertTrue(validator!.validate(postalCode: #"BFPO 61"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGDPostalCode() { // GRENADA (WEST INDIES)
let locale = Locale(identifier: "und-GD")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGEPostalCode() { // GEORGIA
let locale = Locale(identifier: "und-GE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"0101"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGFPostalCode() { // FRENCH GUIANA
let locale = Locale(identifier: "und-GF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97300"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGGPostalCode() { // CHANNEL ISLANDS
let locale = Locale(identifier: "und-GG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"GY1 1AA"#))
XCTAssertTrue(validator!.validate(postalCode: #"GY2 2BT"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGHPostalCode() { // GHANA
let locale = Locale(identifier: "und-GH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGIPostalCode() { // GIBRALTAR
let locale = Locale(identifier: "und-GI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"GX11 1AA"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGLPostalCode() { // GREENLAND
let locale = Locale(identifier: "und-GL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"3900"#))
XCTAssertTrue(validator!.validate(postalCode: #"3950"#))
XCTAssertTrue(validator!.validate(postalCode: #"3911"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGMPostalCode() { // GAMBIA
let locale = Locale(identifier: "und-GM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGNPostalCode() { // GUINEA
let locale = Locale(identifier: "und-GN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"001"#))
XCTAssertTrue(validator!.validate(postalCode: #"200"#))
XCTAssertTrue(validator!.validate(postalCode: #"100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGPPostalCode() { // GUADELOUPE
let locale = Locale(identifier: "und-GP")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGQPostalCode() { // EQUATORIAL GUINEA
let locale = Locale(identifier: "und-GQ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGRPostalCode() { // GREECE
let locale = Locale(identifier: "und-GR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"151 24"#))
XCTAssertTrue(validator!.validate(postalCode: #"151 10"#))
XCTAssertTrue(validator!.validate(postalCode: #"101 88"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGSPostalCode() { // SOUTH GEORGIA
let locale = Locale(identifier: "und-GS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"SIQQ 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGTPostalCode() { // GUATEMALA
let locale = Locale(identifier: "und-GT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"09001"#))
XCTAssertTrue(validator!.validate(postalCode: #"01501"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGUPostalCode() { // GUAM
let locale = Locale(identifier: "und-GU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"96910"#))
XCTAssertTrue(validator!.validate(postalCode: #"96931"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGWPostalCode() { // GUINEA-BISSAU
let locale = Locale(identifier: "und-GW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertTrue(validator!.validate(postalCode: #"1011"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateGYPostalCode() { // GUYANA
let locale = Locale(identifier: "und-GY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateHKPostalCode() { // HONG KONG
let locale = Locale(identifier: "und-HK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateHMPostalCode() { // HEARD AND MCDONALD ISLANDS
let locale = Locale(identifier: "und-HM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"7050"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateHNPostalCode() { // HONDURAS
let locale = Locale(identifier: "und-HN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"31301"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateHRPostalCode() { // CROATIA
let locale = Locale(identifier: "und-HR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"10000"#))
XCTAssertTrue(validator!.validate(postalCode: #"21001"#))
XCTAssertTrue(validator!.validate(postalCode: #"10002"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateHTPostalCode() { // HAITI
let locale = Locale(identifier: "und-HT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"6120"#))
XCTAssertTrue(validator!.validate(postalCode: #"5310"#))
XCTAssertTrue(validator!.validate(postalCode: #"6110"#))
XCTAssertTrue(validator!.validate(postalCode: #"8510"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateHUPostalCode() { // HUNGARY (Rep.)
let locale = Locale(identifier: "und-HU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1037"#))
XCTAssertTrue(validator!.validate(postalCode: #"2380"#))
XCTAssertTrue(validator!.validate(postalCode: #"1540"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateIDPostalCode() { // INDONESIA
let locale = Locale(identifier: "und-ID")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"40115"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateIEPostalCode() { // IRELAND
let locale = Locale(identifier: "und-IE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"A65 F4E2"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateILPostalCode() { // ISRAEL
let locale = Locale(identifier: "und-IL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"9614303"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateIMPostalCode() { // ISLE OF MAN
let locale = Locale(identifier: "und-IM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"IM2 1AA"#))
XCTAssertTrue(validator!.validate(postalCode: #"IM99 1PS"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateINPostalCode() { // INDIA
let locale = Locale(identifier: "und-IN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"110034"#))
XCTAssertTrue(validator!.validate(postalCode: #"110001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateIOPostalCode() { // BRITISH INDIAN OCEAN TERRITORY
let locale = Locale(identifier: "und-IO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"BBND 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateIQPostalCode() { // IRAQ
let locale = Locale(identifier: "und-IQ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"31001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateIRPostalCode() { // IRAN
let locale = Locale(identifier: "und-IR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11936-12345"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateISPostalCode() { // ICELAND
let locale = Locale(identifier: "und-IS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"320"#))
XCTAssertTrue(validator!.validate(postalCode: #"121"#))
XCTAssertTrue(validator!.validate(postalCode: #"220"#))
XCTAssertTrue(validator!.validate(postalCode: #"110"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateITPostalCode() { // ITALY
let locale = Locale(identifier: "und-IT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"00144"#))
XCTAssertTrue(validator!.validate(postalCode: #"47037"#))
XCTAssertTrue(validator!.validate(postalCode: #"39049"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateJEPostalCode() { // CHANNEL ISLANDS
let locale = Locale(identifier: "und-JE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"JE1 1AA"#))
XCTAssertTrue(validator!.validate(postalCode: #"JE2 2BT"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateJMPostalCode() { // JAMAICA
let locale = Locale(identifier: "und-JM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateJOPostalCode() { // JORDAN
let locale = Locale(identifier: "und-JO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11937"#))
XCTAssertTrue(validator!.validate(postalCode: #"11190"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateJPPostalCode() { // JAPAN
let locale = Locale(identifier: "und-JP")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"154-0023"#))
XCTAssertTrue(validator!.validate(postalCode: #"350-1106"#))
XCTAssertTrue(validator!.validate(postalCode: #"951-8073"#))
XCTAssertTrue(validator!.validate(postalCode: #"112-0001"#))
XCTAssertTrue(validator!.validate(postalCode: #"208-0032"#))
XCTAssertTrue(validator!.validate(postalCode: #"231-0012"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKEPostalCode() { // KENYA
let locale = Locale(identifier: "und-KE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"20100"#))
XCTAssertTrue(validator!.validate(postalCode: #"00100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKGPostalCode() { // KYRGYZSTAN
let locale = Locale(identifier: "und-KG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"720001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKHPostalCode() { // CAMBODIA
let locale = Locale(identifier: "und-KH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"12203"#))
XCTAssertTrue(validator!.validate(postalCode: #"14206"#))
XCTAssertTrue(validator!.validate(postalCode: #"12000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKIPostalCode() { // KIRIBATI
let locale = Locale(identifier: "und-KI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKMPostalCode() { // COMOROS
let locale = Locale(identifier: "und-KM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKNPostalCode() { // SAINT KITTS AND NEVIS
let locale = Locale(identifier: "und-KN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKRPostalCode() { // SOUTH KOREA
let locale = Locale(identifier: "und-KR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"03051"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKWPostalCode() { // KUWAIT
let locale = Locale(identifier: "und-KW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"54541"#))
XCTAssertTrue(validator!.validate(postalCode: #"54551"#))
XCTAssertTrue(validator!.validate(postalCode: #"54404"#))
XCTAssertTrue(validator!.validate(postalCode: #"13009"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKYPostalCode() { // CAYMAN ISLANDS
let locale = Locale(identifier: "und-KY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"KY1-1100"#))
XCTAssertTrue(validator!.validate(postalCode: #"KY1-1702"#))
XCTAssertTrue(validator!.validate(postalCode: #"KY2-2101"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateKZPostalCode() { // KAZAKHSTAN
let locale = Locale(identifier: "und-KZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"040900"#))
XCTAssertTrue(validator!.validate(postalCode: #"050012"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLAPostalCode() { // LAO (PEOPLE'S DEM. REP.)
let locale = Locale(identifier: "und-LA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"01160"#))
XCTAssertTrue(validator!.validate(postalCode: #"01000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLBPostalCode() { // LEBANON
let locale = Locale(identifier: "und-LB")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2038 3054"#))
XCTAssertTrue(validator!.validate(postalCode: #"1107 2810"#))
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLCPostalCode() { // SAINT LUCIA
let locale = Locale(identifier: "und-LC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLIPostalCode() { // LIECHTENSTEIN
let locale = Locale(identifier: "und-LI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"9496"#))
XCTAssertTrue(validator!.validate(postalCode: #"9491"#))
XCTAssertTrue(validator!.validate(postalCode: #"9490"#))
XCTAssertTrue(validator!.validate(postalCode: #"9485"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLKPostalCode() { // SRI LANKA
let locale = Locale(identifier: "und-LK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"20000"#))
XCTAssertTrue(validator!.validate(postalCode: #"00100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLRPostalCode() { // LIBERIA
let locale = Locale(identifier: "und-LR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLSPostalCode() { // LESOTHO
let locale = Locale(identifier: "und-LS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLTPostalCode() { // LITHUANIA
let locale = Locale(identifier: "und-LT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"04340"#))
XCTAssertTrue(validator!.validate(postalCode: #"03500"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLUPostalCode() { // LUXEMBOURG
let locale = Locale(identifier: "und-LU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"4750"#))
XCTAssertTrue(validator!.validate(postalCode: #"2998"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLVPostalCode() { // LATVIA
let locale = Locale(identifier: "und-LV")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"LV-1073"#))
XCTAssertTrue(validator!.validate(postalCode: #"LV-1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateLYPostalCode() { // LIBYA
let locale = Locale(identifier: "und-LY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMAPostalCode() { // MOROCCO
let locale = Locale(identifier: "und-MA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"53000"#))
XCTAssertTrue(validator!.validate(postalCode: #"10000"#))
XCTAssertTrue(validator!.validate(postalCode: #"20050"#))
XCTAssertTrue(validator!.validate(postalCode: #"16052"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMCPostalCode() { // MONACO
let locale = Locale(identifier: "und-MC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"98000"#))
XCTAssertTrue(validator!.validate(postalCode: #"98020"#))
XCTAssertTrue(validator!.validate(postalCode: #"98011"#))
XCTAssertTrue(validator!.validate(postalCode: #"98001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMDPostalCode() { // Rep. MOLDOVA
let locale = Locale(identifier: "und-MD")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2012"#))
XCTAssertTrue(validator!.validate(postalCode: #"2019"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMEPostalCode() { // MONTENEGRO
let locale = Locale(identifier: "und-ME")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"81257"#))
XCTAssertTrue(validator!.validate(postalCode: #"81258"#))
XCTAssertTrue(validator!.validate(postalCode: #"81217"#))
XCTAssertTrue(validator!.validate(postalCode: #"84314"#))
XCTAssertTrue(validator!.validate(postalCode: #"85366"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMFPostalCode() { // SAINT MARTIN
let locale = Locale(identifier: "und-MF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMGPostalCode() { // MADAGASCAR
let locale = Locale(identifier: "und-MG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"501"#))
XCTAssertTrue(validator!.validate(postalCode: #"101"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMHPostalCode() { // MARSHALL ISLANDS
let locale = Locale(identifier: "und-MH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"96960"#))
XCTAssertTrue(validator!.validate(postalCode: #"96970"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMKPostalCode() { // MACEDONIA
let locale = Locale(identifier: "und-MK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1314"#))
XCTAssertTrue(validator!.validate(postalCode: #"1321"#))
XCTAssertTrue(validator!.validate(postalCode: #"1443"#))
XCTAssertTrue(validator!.validate(postalCode: #"1062"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMLPostalCode() { // MALI
let locale = Locale(identifier: "und-ML")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMMPostalCode() { // MYANMAR
let locale = Locale(identifier: "und-MM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11181"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMNPostalCode() { // MONGOLIA
let locale = Locale(identifier: "und-MN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"65030"#))
XCTAssertTrue(validator!.validate(postalCode: #"65270"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMOPostalCode() { // MACAO
let locale = Locale(identifier: "und-MO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMPPostalCode() { // NORTHERN MARIANA ISLANDS
let locale = Locale(identifier: "und-MP")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"96950"#))
XCTAssertTrue(validator!.validate(postalCode: #"96951"#))
XCTAssertTrue(validator!.validate(postalCode: #"96952"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMQPostalCode() { // MARTINIQUE
let locale = Locale(identifier: "und-MQ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97220"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMRPostalCode() { // MAURITANIA
let locale = Locale(identifier: "und-MR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMSPostalCode() { // MONTSERRAT
let locale = Locale(identifier: "und-MS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMTPostalCode() { // MALTA
let locale = Locale(identifier: "und-MT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"NXR 01"#))
XCTAssertTrue(validator!.validate(postalCode: #"ZTN 05"#))
XCTAssertTrue(validator!.validate(postalCode: #"GPO 01"#))
XCTAssertTrue(validator!.validate(postalCode: #"BZN 1130"#))
XCTAssertTrue(validator!.validate(postalCode: #"SPB 6031"#))
XCTAssertTrue(validator!.validate(postalCode: #"VCT 1753"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMUPostalCode() { // MAURITIUS
let locale = Locale(identifier: "und-MU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"42602"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMVPostalCode() { // MALDIVES
let locale = Locale(identifier: "und-MV")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"20026"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMWPostalCode() { // MALAWI
let locale = Locale(identifier: "und-MW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMXPostalCode() { // MEXICO
let locale = Locale(identifier: "und-MX")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"02860"#))
XCTAssertTrue(validator!.validate(postalCode: #"77520"#))
XCTAssertTrue(validator!.validate(postalCode: #"06082"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMYPostalCode() { // MALAYSIA
let locale = Locale(identifier: "und-MY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"43000"#))
XCTAssertTrue(validator!.validate(postalCode: #"50754"#))
XCTAssertTrue(validator!.validate(postalCode: #"88990"#))
XCTAssertTrue(validator!.validate(postalCode: #"50670"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateMZPostalCode() { // MOZAMBIQUE
let locale = Locale(identifier: "und-MZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1102"#))
XCTAssertTrue(validator!.validate(postalCode: #"1119"#))
XCTAssertTrue(validator!.validate(postalCode: #"3212"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNAPostalCode() { // NAMIBIA
let locale = Locale(identifier: "und-NA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNCPostalCode() { // NEW CALEDONIA
let locale = Locale(identifier: "und-NC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"98814"#))
XCTAssertTrue(validator!.validate(postalCode: #"98800"#))
XCTAssertTrue(validator!.validate(postalCode: #"98810"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNEPostalCode() { // NIGER
let locale = Locale(identifier: "und-NE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"8001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNFPostalCode() { // NORFOLK ISLAND
let locale = Locale(identifier: "und-NF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2899"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNGPostalCode() { // NIGERIA
let locale = Locale(identifier: "und-NG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"930283"#))
XCTAssertTrue(validator!.validate(postalCode: #"300001"#))
XCTAssertTrue(validator!.validate(postalCode: #"931104"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNIPostalCode() { // NICARAGUA
let locale = Locale(identifier: "und-NI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"52000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNLPostalCode() { // NETHERLANDS
let locale = Locale(identifier: "und-NL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1234 AB"#))
XCTAssertTrue(validator!.validate(postalCode: #"2490 AA"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNOPostalCode() { // NORWAY
let locale = Locale(identifier: "und-NO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"0025"#))
XCTAssertTrue(validator!.validate(postalCode: #"0107"#))
XCTAssertTrue(validator!.validate(postalCode: #"6631"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNPPostalCode() { // NEPAL
let locale = Locale(identifier: "und-NP")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"44601"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNRPostalCode() { // NAURU CENTRAL PACIFIC
let locale = Locale(identifier: "und-NR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNUPostalCode() { // NIUE
let locale = Locale(identifier: "und-NU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateNZPostalCode() { // NEW ZEALAND
let locale = Locale(identifier: "und-NZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"6001"#))
XCTAssertTrue(validator!.validate(postalCode: #"6015"#))
XCTAssertTrue(validator!.validate(postalCode: #"6332"#))
XCTAssertTrue(validator!.validate(postalCode: #"8252"#))
XCTAssertTrue(validator!.validate(postalCode: #"1030"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateOMPostalCode() { // OMAN
let locale = Locale(identifier: "und-OM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"133"#))
XCTAssertTrue(validator!.validate(postalCode: #"112"#))
XCTAssertTrue(validator!.validate(postalCode: #"111"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePAPostalCode() { // PANAMA (REP.)
let locale = Locale(identifier: "und-PA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePEPostalCode() { // PERU
let locale = Locale(identifier: "und-PE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"LIMA 23"#))
XCTAssertTrue(validator!.validate(postalCode: #"LIMA 42"#))
XCTAssertTrue(validator!.validate(postalCode: #"CALLAO 2"#))
XCTAssertTrue(validator!.validate(postalCode: #"02001"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePFPostalCode() { // FRENCH POLYNESIA
let locale = Locale(identifier: "und-PF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"98709"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePGPostalCode() { // PAPUA NEW GUINEA
let locale = Locale(identifier: "und-PG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"111"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePHPostalCode() { // PHILIPPINES
let locale = Locale(identifier: "und-PH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1008"#))
XCTAssertTrue(validator!.validate(postalCode: #"1050"#))
XCTAssertTrue(validator!.validate(postalCode: #"1135"#))
XCTAssertTrue(validator!.validate(postalCode: #"1207"#))
XCTAssertTrue(validator!.validate(postalCode: #"2000"#))
XCTAssertTrue(validator!.validate(postalCode: #"1000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePKPostalCode() { // PAKISTAN
let locale = Locale(identifier: "und-PK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"44000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePLPostalCode() { // POLAND
let locale = Locale(identifier: "und-PL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"00-950"#))
XCTAssertTrue(validator!.validate(postalCode: #"05-470"#))
XCTAssertTrue(validator!.validate(postalCode: #"48-300"#))
XCTAssertTrue(validator!.validate(postalCode: #"32-015"#))
XCTAssertTrue(validator!.validate(postalCode: #"00-940"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePMPostalCode() { // ST. PIERRE AND MIQUELON
let locale = Locale(identifier: "und-PM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97500"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePNPostalCode() { // PITCAIRN
let locale = Locale(identifier: "und-PN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"PCRN 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePRPostalCode() { // PUERTO RICO
let locale = Locale(identifier: "und-PR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"00930"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePSPostalCode() { // PALESTINIAN TERRITORY
let locale = Locale(identifier: "und-PS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePTPostalCode() { // PORTUGAL
let locale = Locale(identifier: "und-PT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"2725-079"#))
XCTAssertTrue(validator!.validate(postalCode: #"1250-096"#))
XCTAssertTrue(validator!.validate(postalCode: #"1201-950"#))
XCTAssertTrue(validator!.validate(postalCode: #"2860-571"#))
XCTAssertTrue(validator!.validate(postalCode: #"1208-148"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePWPostalCode() { // PALAU
let locale = Locale(identifier: "und-PW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"96940"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidatePYPostalCode() { // PARAGUAY
let locale = Locale(identifier: "und-PY")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1536"#))
XCTAssertTrue(validator!.validate(postalCode: #"1538"#))
XCTAssertTrue(validator!.validate(postalCode: #"1209"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateQAPostalCode() { // QATAR
let locale = Locale(identifier: "und-QA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateREPostalCode() { // REUNION
let locale = Locale(identifier: "und-RE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"97400"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateROPostalCode() { // ROMANIA
let locale = Locale(identifier: "und-RO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"060274"#))
XCTAssertTrue(validator!.validate(postalCode: #"061357"#))
XCTAssertTrue(validator!.validate(postalCode: #"200716"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateRSPostalCode() { // REPUBLIC OF SERBIA
let locale = Locale(identifier: "und-RS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"106314"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateRUPostalCode() { // RUSSIAN FEDERATION
let locale = Locale(identifier: "und-RU")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"247112"#))
XCTAssertTrue(validator!.validate(postalCode: #"103375"#))
XCTAssertTrue(validator!.validate(postalCode: #"188300"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateRWPostalCode() { // RWANDA
let locale = Locale(identifier: "und-RW")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSAPostalCode() { // SAUDI ARABIA
let locale = Locale(identifier: "und-SA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11564"#))
XCTAssertTrue(validator!.validate(postalCode: #"11187"#))
XCTAssertTrue(validator!.validate(postalCode: #"11142"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSBPostalCode() { // SOLOMON ISLANDS
let locale = Locale(identifier: "und-SB")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSCPostalCode() { // SEYCHELLES
let locale = Locale(identifier: "und-SC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSEPostalCode() { // SWEDEN
let locale = Locale(identifier: "und-SE")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"11455"#))
XCTAssertTrue(validator!.validate(postalCode: #"12345"#))
XCTAssertTrue(validator!.validate(postalCode: #"10500"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSGPostalCode() { // REP. OF SINGAPORE
let locale = Locale(identifier: "und-SG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"546080"#))
XCTAssertTrue(validator!.validate(postalCode: #"308125"#))
XCTAssertTrue(validator!.validate(postalCode: #"408600"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSHPostalCode() { // SAINT HELENA
let locale = Locale(identifier: "und-SH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"STHL 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSIPostalCode() { // SLOVENIA
let locale = Locale(identifier: "und-SI")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"4000"#))
XCTAssertTrue(validator!.validate(postalCode: #"1001"#))
XCTAssertTrue(validator!.validate(postalCode: #"2500"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSJPostalCode() { // SVALBARD AND JAN MAYEN ISLANDS
let locale = Locale(identifier: "und-SJ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"9170"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSKPostalCode() { // SLOVAKIA
let locale = Locale(identifier: "und-SK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"010 01"#))
XCTAssertTrue(validator!.validate(postalCode: #"023 14"#))
XCTAssertTrue(validator!.validate(postalCode: #"972 48"#))
XCTAssertTrue(validator!.validate(postalCode: #"921 01"#))
XCTAssertTrue(validator!.validate(postalCode: #"975 99"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSLPostalCode() { // SIERRA LEONE
let locale = Locale(identifier: "und-SL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSMPostalCode() { // SAN MARINO
let locale = Locale(identifier: "und-SM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"47890"#))
XCTAssertTrue(validator!.validate(postalCode: #"47891"#))
XCTAssertTrue(validator!.validate(postalCode: #"47895"#))
XCTAssertTrue(validator!.validate(postalCode: #"47899"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSNPostalCode() { // SENEGAL
let locale = Locale(identifier: "und-SN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"12500"#))
XCTAssertTrue(validator!.validate(postalCode: #"46024"#))
XCTAssertTrue(validator!.validate(postalCode: #"16556"#))
XCTAssertTrue(validator!.validate(postalCode: #"10000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSOPostalCode() { // SOMALIA
let locale = Locale(identifier: "und-SO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"JH 09010"#))
XCTAssertTrue(validator!.validate(postalCode: #"AD 11010"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSRPostalCode() { // SURINAME
let locale = Locale(identifier: "und-SR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSSPostalCode() { // SOUTH SUDAN
let locale = Locale(identifier: "und-SS")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSTPostalCode() { // SAO TOME AND PRINCIPE
let locale = Locale(identifier: "und-ST")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSVPostalCode() { // EL SALVADOR
let locale = Locale(identifier: "und-SV")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"CP 1101"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSXPostalCode() { // SINT MAARTEN
let locale = Locale(identifier: "und-SX")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateSZPostalCode() { // SWAZILAND
let locale = Locale(identifier: "und-SZ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"H100"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTAPostalCode() { // TRISTAN DA CUNHA
let locale = Locale(identifier: "und-TA")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"TDCU 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTCPostalCode() { // TURKS AND CAICOS ISLANDS
let locale = Locale(identifier: "und-TC")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"TKCA 1ZZ"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTDPostalCode() { // CHAD
let locale = Locale(identifier: "und-TD")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTFPostalCode() { // FRENCH SOUTHERN TERRITORIES
let locale = Locale(identifier: "und-TF")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTGPostalCode() { // TOGO
let locale = Locale(identifier: "und-TG")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTHPostalCode() { // THAILAND
let locale = Locale(identifier: "und-TH")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"10150"#))
XCTAssertTrue(validator!.validate(postalCode: #"10210"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTJPostalCode() { // TAJIKISTAN
let locale = Locale(identifier: "und-TJ")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"735450"#))
XCTAssertTrue(validator!.validate(postalCode: #"734025"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTKPostalCode() { // TOKELAU
let locale = Locale(identifier: "und-TK")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTLPostalCode() { // TIMOR-LESTE
let locale = Locale(identifier: "und-TL")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTMPostalCode() { // TURKMENISTAN
let locale = Locale(identifier: "und-TM")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"744000"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTNPostalCode() { // TUNISIA
let locale = Locale(identifier: "und-TN")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"1002"#))
XCTAssertTrue(validator!.validate(postalCode: #"8129"#))
XCTAssertTrue(validator!.validate(postalCode: #"3100"#))
XCTAssertTrue(validator!.validate(postalCode: #"1030"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTOPostalCode() { // TONGA
let locale = Locale(identifier: "und-TO")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTRPostalCode() { // TURKEY
let locale = Locale(identifier: "und-TR")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertTrue(validator!.validate(postalCode: #"01960"#))
XCTAssertTrue(validator!.validate(postalCode: #"06101"#))
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTTPostalCode() { // TRINIDAD AND TOBAGO
let locale = Locale(identifier: "und-TT")
let validator = PostalCodeValidator(locale: locale)
XCTAssertNotNil(validator)
XCTAssertFalse(validator!.validate(postalCode:#"XXXXXXXXXXX"#))
}
func testValidateTVPostalCode
gitextract_1etc8eer/
├── .github/
│ └── workflows/
│ └── main.yml
├── .gitignore
├── Brewfile
├── LICENSE.md
├── Makefile
├── Package.swift
├── README.md
├── Resources/
│ └── postalData.json
├── Scripts/
│ └── Regions.swift
├── Sources/
│ └── PostalCodeValidator/
│ ├── PostalCodeValidator.swift
│ └── PostalCodeValidator.swift.gyb
└── Tests/
├── LinuxMain.swift
└── PostalCodeValidatorTests/
├── PostalCodeValidatorTests.swift
├── PostalCodeValidatorTests.swift.gyb
└── XCTestManifests.swift
Condensed preview — 15 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (251K chars).
[
{
"path": ".github/workflows/main.yml",
"chars": 244,
"preview": "name: CI\n\non: [push]\n\njobs:\n test:\n runs-on: ${{ matrix.os }}\n\n strategy:\n matrix:\n os: [macOS-latest"
},
{
"path": ".gitignore",
"chars": 67,
"preview": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\n.swiftpm\nResources/data/*\n"
},
{
"path": "Brewfile",
"chars": 36,
"preview": "tap 'nshipster/formulae'\nbrew 'gyb'\n"
},
{
"path": "LICENSE.md",
"chars": 1062,
"preview": "Copyright 2019 Mattt (https://mat.tt)\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of t"
},
{
"path": "Makefile",
"chars": 839,
"preview": "INPUTS = $(patsubst %,Resources/data/%.json,$(shell swift Scripts/Regions.swift))\n\n.DEFAULT_GOAL: all\n\n.PHONY: all\nall: "
},
{
"path": "Package.swift",
"chars": 1112,
"preview": "// swift-tools-version:4.0\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
},
{
"path": "README.md",
"chars": 2883,
"preview": "# PostalCodeValidator\n\n[![Build Status][ci status badge]][ci status]\n[![License][license badge]][license]\n[![Swift Versi"
},
{
"path": "Resources/postalData.json",
"chars": 89948,
"preview": "[\n {\n \"zipex\": \"ASCN 1ZZ\",\n \"name\": \"ASCENSION ISLAND\",\n \"zip\": \"ASCN 1ZZ\",\n \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n "
},
{
"path": "Scripts/Regions.swift",
"chars": 72,
"preview": "import Foundation\n\nprint(Locale.isoRegionCodes.joined(separator: \"\\n\"))\n"
},
{
"path": "Sources/PostalCodeValidator/PostalCodeValidator.swift",
"chars": 10564,
"preview": "// This file was automatically generated and should not be edited.\nimport Foundation\n\n/// A validator for postal codes.\n"
},
{
"path": "Sources/PostalCodeValidator/PostalCodeValidator.swift.gyb",
"chars": 2874,
"preview": "% warning = \"This file was automatically generated and should not be edited.\"\n// ${warning}\nimport Foundation\n\n%{\n# enco"
},
{
"path": "Tests/LinuxMain.swift",
"chars": 140,
"preview": "import XCTest\n\nimport PostalCodeValidatorTests\n\nvar tests = [XCTestCaseEntry]()\ntests += PostalCodeValidatorTests.allTes"
},
{
"path": "Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift",
"chars": 113649,
"preview": "// This file was automatically generated and should not be edited.\nimport Foundation\n@testable import PostalCodeValidato"
},
{
"path": "Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift.gyb",
"chars": 1379,
"preview": "% warning = \"This file was automatically generated and should not be edited.\"\n// ${warning}\nimport Foundation\n@testable "
},
{
"path": "Tests/PostalCodeValidatorTests/XCTestManifests.swift",
"chars": 172,
"preview": "import XCTest\n\n#if !os(macOS)\n public func allTests() -> [XCTestCaseEntry] {\n return [\n testCase(Po"
}
]
About this extraction
This page contains the full source code of the FormatterKit/PostalCodeValidator GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 15 files (219.8 KB), approximately 74.3k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.