Regexp::Common::zip -- provide regexes for postal codes.
use Regexp::Common qw /zip/; while (<>) { /^$RE{zip}{Dutch}$/ 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}].
$RE{zip}{Country}[{options}]
The following common options are used:
{-prefix=[yes|no|allow]}
{-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.
-prefix
-prefix=yes
-prefix=no
y
n
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.
DE
D
-country
iso
cept
Examples: /$RE{zip}{Dutch}/; # Matches '1234 AB' and 'NL-1234 AB'. /$RE{zip}{Dutch}{-prefix => 'no'}/; # Matches '1234 AB' but not 'NL-1234 AB'. /$RE{zip}{Dutch}{-prefix => 'yes'}/; # Matches 'NL-1234 AB' but not '1234 AB'.
/$RE{zip}{German}/; # Matches 'DE-12345' and 'D-12345'. /$RE{zip}{German}{-country => 'iso'}/; # Matches 'DE-12345' but not 'D-12345'. /$RE{zip}{German}{-country => 'cept'}/; # Matches 'D-12345' but not 'DE-12345'. /$RE{zip}{German}{-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.
-sep
Examples: /$RE{zip}{Dutch}/; # Matches '1234 AB' but not '1234AB'. /$RE{zip}{Dutch}{-sep => '\s*'}/; # Matches '1234 AB' and '1234AB'.
$RE{zip}{Dutch}
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.
{-sep}
If {-keep} is used, the following variables will be set:
{-keep}
The entire postal code.
The country code prefix.
The postal code without the country prefix.
The digits part of the postal code.
The separator between the digits and the letters.
The letters part of the postal code.
$RE{zip}{French}
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).
The department.
The last three digits.
$RE{zip}{German}
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).
The distribution zone.
The distribution region.
The distribution district and postal town.
$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.
-extended
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:
The first 5 digits of the postal code.
The separator between the 5 digit part and the 4 digit part.
The 4 digit part of the postal code (if any).
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.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)
This package is maintained by Abigail (regexp-common@abigail.nl).
Zip codes for most countries are missing. Send them in to regexp-common@abigail.nl.
Do Dutch zip code actually allow all letters? Or are I and O omitted? What about the Q?
Copyright (c) 2001 - 2002, Damian Conway. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see http://www.perl.com/perl/misc/Artistic.html)
To install Regexp::Common, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Regexp::Common
CPAN shell
perl -MCPAN -e shell install Regexp::Common
For more information on module installation, please visit the detailed CPAN module installation guide.