On this page
Validators
PostCode
Laminas\I18n\Validator\PostCode
allows you to determine if a given value is a
valid postal code. Postal codes are specific to cities, and in some locales
termed ZIP codes.
Laminas\I18n\Validator\PostCode
knows more than 160 different postal code
formats. To select the correct format there are two ways. You can either use a
fully qualified locale, or you can set your own format manually.
Basic Usage
$validator = new Laminas\I18n\Validator\PostCode();
var_dump($validator->isValid(1010)); // true
By default, if no country code is provided, PostCode
will use the system
locale provided by PHP's Locale::getDefault()
and Locale::getRegion()
to
extract the region code.
(The above example assumes that the environment locale is set to de_AT
.)
Using Locale
Using a locale is more convenient as laminas-validator already knows the
appropriate postal code format for each locale; however, you need to use the
fully qualified locale (one containing a region specifier) to do so. For
instance, the locale de
is a locale but could not be used with
Laminas\I18n\Validator\PostCode
as it does not include the region; de_AT
,
however, would be a valid locale, as it specifies the region code (AT
, for
Austria).
$validator = new Laminas\I18n\Validator\PostCode(['locale' => 'de_AT']);
var_dump($validator->isValid(1010)); // true
$validator = new Laminas\I18n\Validator\PostCode();
$validator->setLocale('de_AT');
$validator->isValid(1010); // true
Locale::setDefault('de_AT');
$validator = new Laminas\I18n\Validator\PostCode();
var_dump($validator->isValid(1010)); // true
Get Current Value
To get the current value of this option, use the getLocale()
method.
$validator = new Laminas\I18n\Validator\PostCode(['locale' => 'de_AT']);
echo $validator->getLocale(); // 'de_AT'
Default Value
By default, if no locale is provided, PostCode
will use the system locale
provided by PHP's Locale::getDefault()
and Locale::getRegion()
to extract
the region code.
Using Custom Format
Postal code formats are regular expression strings. When the international
postal code format, which is used by setting the locale, does not fit your
needs, then you can also manually set a format by calling setFormat()
.
$validator = new Laminas\I18n\Validator\PostCode(['format' => 'AT-\d{4}']);
var_dump($validator->isValid('AT-1010')); // true
$validator = new Laminas\I18n\Validator\PostCode();
$validator->setFormat('AT-\d{4}');
var_dump($validator->isValid('AT-1010')); // true
Conventions for self defined Formats
When using self defined formats, you should omit the regex delimiters and
anchors ('/^'
and '$/'
). They are attached automatically.
You should also be aware that postcode values will always be validated in a strict way. This means that they have to be written standalone without additional characters when they are not covered by the format.
Get Current Value
To get the current value of this option, use the getLocale()
method.
$validator = new Laminas\I18n\Validator\PostCode(['format' => 'AT-\d{4}']);
echo $validator->getFormat(); // 'AT-\d{4}'
Default Value
The default value of this option is null
.
Using Callback Service
The PostCode
validator allows additional validations via an optional service
callback. The callback runs before the standard validation of the PostCode
class.
Internally, the additional validation is done by
laminas-validator's Callback
class.
$validator = new Laminas\I18n\Validator\PostCode([
'service' => static function ($value) {
// Allow only certain districts in town
if (in_array($value, range(1010, 1423), false)) {
return true;
}
return false;
},
'locale' => 'de_AT',
]);
var_dump($validator->isValid(1010)); // true
var_dump($validator->isValid(1600)); // false
$validator = new Laminas\I18n\Validator\PostCode();
$validator->setService(static function ($value) {
// Allow only certain districts in town
if (in_array($value, range(1010, 1423), false)) {
return true;
}
return false;
});
$validator->setLocale('de_AT');
var_dump($validator->isValid(1010)); // true
var_dump($validator->isValid(1600)); // false
Default Value
The default value of this option is null
.