{-prefix=[yes|no|allow]}
and {-country=PAT}
.
{-sep=PAT}
$RE{zip}{Australia}
$RE{zip}{Belgium}
$RE{zip}{Denmark}
$RE{zip}{France}
$RE{zip}{Germany}
$RE{zip}{Greenland}
$RE{zip}{Italy}
$RE{zip}{Netherlands}
$RE{zip}{Norway}
$RE{zip}{Spain}
$RE{zip}{Switzerland}
$RE{zip}{US}{-extended => [yes|no|allow]}
Regexp::Common::zip -- provide regexes for postal codes.
use Regexp::Common qw /zip/; while (<>) { /^$RE{zip}{Netherlands}$/ and print "Dutch postal code\n"; }
Please consult the manual of Regexp::Common for a general description of the works of this interface.
Do not use this module directly, but load it via Regexp::Common.
This module offers patterns for zip or postal codes of many different
countries. They all have the form $RE{zip}{Country}[{options}]
.
The following common options are used:
{-prefix=[yes|no|allow]}
and {-country=PAT}
.
Postal codes can be prefixed with a country abbreviation. That is,
a dutch postal code of 1234 AB can also be written as NL-1234 AB.
By default, all the patterns will allow the prefixes. But this can be
changed with the -prefix
option. With -prefix=yes
, the returned
pattern requires a country prefix, while -prefix=no
disallows a
prefix. Any argument that doesn't start with a y
or a n
allows a
country prefix, but doesn't require them.
The prefixes used are, unfortunally, not always the same. Officially,
ISO country codes need to be used, but the usage of CEPT codes (the
same ones as used on cars) is common too. By default, each postal code
will recognize a country prefix that's either the ISO standard or the
CEPT code. That is, German postal codes may prefixed with either DE
or D
. The recognized prefix can be changed with the -country
option, which takes a (sub)pattern as argument. The arguments iso
and cept
are special, and indicate the language prefix should be the
ISO country code, or the CEPT code.
Examples: /$RE{zip}{Netherlands}/; # Matches '1234 AB' and 'NL-1234 AB'. /$RE{zip}{Netherlands}{-prefix => 'no'}/; # Matches '1234 AB' but not 'NL-1234 AB'. /$RE{zip}{Netherlands}{-prefix => 'yes'}/; # Matches 'NL-1234 AB' but not '1234 AB'.
/$RE{zip}{Germany}/; # Matches 'DE-12345' and 'D-12345'. /$RE{zip}{Germany}{-country => 'iso'}/; # Matches 'DE-12345' but not 'D-12345'. /$RE{zip}{Germany}{-country => 'cept'}/; # Matches 'D-12345' but not 'DE-12345'. /$RE{zip}{Germany}{-country => 'GER'}/; # Matches 'GER-12345'.
{-sep=PAT}
Some countries have postal codes that consist of two parts. Typically
there is an official way of separating those parts; but in practise
people tend to use different separators. For instance, if the official
way to separate parts is to use a space, it happens that the space is
left off. The -sep
option can be given a pattern as argument which
indicates what to use as a separator between the parts.
Examples: /$RE{zip}{Netherlands}/; # Matches '1234 AB' but not '1234AB'. /$RE{zip}{Netherlands}{-sep => '\s*'}/; # Matches '1234 AB' and '1234AB'.
$RE{zip}{Australia}
Returns a pattern that recognizes Australian postal codes. Australian
postal codes consist of four digits; the first two digits, which range
from '10' to '97', indicate the state. Territories use '02' or '08'
as starting digits; the leading zero is optional. '0909' is the only
postal code starting with '09' (the leading zero is optional here as
well) - this is the postal code for the Nothern Territory University).
The (optional) country
prefixes are AU (ISO country code) and AUS (CEPT code).
Regexp::Common 2.107 and before used $RE{zip}{Australia}
. This is
still supported.
If {-keep}
is used, the following variables will be set:
$RE{zip}{Belgium}
Returns a pattern than recognizes Belgian postal codes. Belgian postal codes consist of 4 digits, of which the first indicates the province. The (optional) country prefixes are BE (ISO country code) and B (CEPT code).
If {-keep}
is used, the following variables will be set:
$RE{zip}{Denmark}
Returns a pattern that recognizes Danish postal codes. Danish postal codes consist of four numbers; the first digit (which cannot be 0), indicates the distribution region, the second the distribution district. The (optional) country prefix is DK, which is both the ISO country code and the CEPT code.
If {-keep}
is used, the following variables will be set:
$RE{zip}{France}
Returns a pattern that recognizes French postal codes. French postal
codes consist of five numbers; the first two numbers, which range
from '01' to '98', indicate the department. The (optional) country
prefixes are FR (ISO country code) and F (CEPT code).
Regexp::Common 2.107 and before used $RE{zip}{French}
. This is
still supported.
If {-keep}
is used, the following variables will be set:
$RE{zip}{Germany}
Returns a pattern that recognizes German postal codes. German postal
codes consist of five numbers; the first number indicating the
distribution zone, the second the distribution region, while the
latter three indicate the distribution district and the postal town.
The (optional) country prefixes are DE (ISO country code) and
D (CEPT code).
Regexp::Common 2.107 and before used $RE{zip}{German}
. This is
still supported.
If {-keep}
is used, the following variables will be set:
$RE{zip}{Greenland}
Returns a pattern that recognizes postal codes from Greenland. Greenland, being part of Denmark, uses Danish postal codes. All postal codes of Greenland start with 39. The (optional) country prefix is DK, which is both the ISO country code and the CEPT code.
If {-keep}
is used, the following variables will be set:
$RE{zip}{Italy}
Returns a pattern recognizing Italian postal codes. Italian postal codes consist of 5 digits. The first digit indicates the region, the second the province. The third digit is odd for province capitals, and even for the province itself. The fourth digit indicates the route, and the fifth a place on the route (0 for small places, alphabetically for the rest).
The country prefix is either IT (the ISO country code), or I (the CEPT code).
If {-keep}
is used, the following variables will be set:
$RE{zip}{Netherlands}
Returns a pattern that recognizes Dutch postal codes. Dutch postal
codes consist of 4 digits and 2 letters, separated by a space.
The separator can be changed using the {-sep}
option, as discussed
above. The (optional) country prefix is NL, which is both the
ISO country code and the CEPT code. Regexp::Common 2.107 and earlier
used $RE{zip}{Dutch}
. This is still supported.
If {-keep}
is used, the following variables will be set:
$RE{zip}{Norway}
Returns a pattern that recognizes Norwegian postal codes. Norwegian postal codes consist of four digits.
The country prefix is either NO (the ISO country code), or N (the CEPT code).
If {-keep}
is used, the following variables will be set:
$RE{zip}{Spain}
Returns a pattern that recognizes Spanish postal codes. Spanish postal
codes consist of 5 digits. The first 2 indicate one of Spains fifties
provinces (in alphabetical order), starting with 00
. The third digit
indicates a main city or the main delivery rounds. The last two digits
are the delivery area, secondary delivery route or a link to rural areas.
The country prefix is either ES (the ISO country code), or E (the CEPT code).
If {-keep}
is used, the following variables will be set:
$RE{zip}{Switzerland}
Returns a pattern that recognizes Swiss postal codes. Swiss postal codes consist of 4 digits. The first indicates the district, starting with 1. The second indicates the area, the third, the route, and the fourth the post office number.
$RE{zip}{US}{-extended => [yes|no|allow]}
Returns a pattern that recognizes US zip codes. US zip codes consist
of 5 digits, with an optional 4 digit extension. By default, extensions
are allowed, but not required. This can be influenced by the
-extended
option. If its argument starts with a y
,
extensions are required; if the argument starts with a n
,
extensions will not be recognized. If an extension is used, a dash
is used to separate the main part from the extension, but this can
be changed with the -sep
option.
The country prefix is either US (the ISO country code), or USA (the CEPT code).
If {-keep}
is being used, the following variables will be set:
You need at least version 5.005_03 to be able to use US postal codes. Older versions contain a bug that let the pattern match invalid US postal codes.
$Log: zip.pm,v $ Revision 2.116 2008/05/26 19:31:05 abigail Fix syntax error Revision 2.115 2008/05/26 17:10:32 abigail French & Swiss zip codes Revision 2.114 2008/05/23 21:30:10 abigail Changed email address Revision 2.113 2008/05/23 21:28:02 abigail Changed license Revision 2.112 2005/01/01 16:34:04 abigail - Modified the -keep captures for US zip codes. Both the 5 and 4 digit parts of the zip codes can be dissected into 2 parts. - Updated the copyright notice. Revision 2.111 2004/12/14 23:15:13 abigail Disable '-prefix' for Danish postal codes for pre-5.00503 perls. Revision 2.110 2004/06/09 21:44:13 abigail - Norway, Italy, Spain. - References. - POD nits. Revision 2.109 2003/07/04 13:34:05 abigail Fixed assignment to Revision 2.108 2003/06/24 23:23:14 abigail Australia currently has a postal code '0909' (or '909') for the Northern Territory University; this is the only postal code starting with '09'. $RE{zip}{Australia} now accepts '0909', and rejects all other postal codes starting with '09'. (Ron Savage). Revision 2.107 2003/03/25 23:46:58 abigail Added RCS Id: tag Revision 2.106 2003/02/09 21:31:16 abigail Postal codes for Denmark and Greenland Revision 2.105 2003/02/09 12:41:31 abigail Added Belgian postal codes Revision 2.104 2003/02/01 22:55:31 abigail Changed Copyright years Revision 2.103 2003/02/01 22:49:25 abigail Added Australian postal codes Revision 2.102 2003/01/23 02:18:42 abigail Added French postal codes Revision 2.101 2003/01/22 17:23:26 abigail German postal codes added. Revision 2.100 2003/01/21 23:19:40 abigail The whole world understands RCS/CVS version numbers, that 1.9 is an older version than 1.10. Except CPAN. Curse the idiot(s) who think that version numbers are floats (in which universe do floats have more than one decimal dot?). Everything is bumped to version 2.100 because CPAN couldn't deal with the fact one file had version 1.10. Revision 1.5 2003/01/16 11:06:27 abigail Typo fix. Revision 1.4 2003/01/16 11:02:17 abigail For US zip codes, version needs to be at least 5.005_03; older 5.005 versions seem to have a bug in the regex machine, creating false positives. Revision 1.3 2003/01/13 21:45:01 abigail Complete redoing of Dutch & US postal codes. Documented them. Revision 1.2 2003/01/01 15:09:47 abigail Added US zip codes. Revision 1.1 2002/12/31 02:01:33 abigail First version
Regexp::Common for a general description of how to use this interface.
Damian Conway (damian@conway.org) and Abigail (regexp-common@abigail.be).
This package is maintained by Abigail (regexp-common@abigail.be).
Zip codes for most countries are missing. Send them in to regexp-common@abigail.be.
This software is Copyright (c) 2001 - 2008, Damian Conway and Abigail.
This module is free software, and maybe used under any of the following licenses:
1) The Perl Artistic License. See the file COPYRIGHT.AL. 2) The Perl Artistic License 2.0. See the file COPYRIGHT.AL2. 3) The BSD Licence. See the file COPYRIGHT.BSD. 4) The MIT Licence. See the file COPYRIGHT.MIT.