333 lines
11 KiB
Markdown
333 lines
11 KiB
Markdown
|
# Validators
|
||
|
|
||
|
zend-i18n provides a set of validators that use internationalization
|
||
|
capabilities.
|
||
|
|
||
|
## Alnum
|
||
|
|
||
|
`Zend\I18n\Validator\Alnum` allows you to validate if a given value contains
|
||
|
only alphabetical characters and digits. There is no length limitation for the
|
||
|
input you want to validate.
|
||
|
|
||
|
### Supported options
|
||
|
|
||
|
The following options are supported for `Zend\I18n\Validator\Alnum`:
|
||
|
|
||
|
- `allowWhiteSpace`: Whether or not whitespace characters are allowed. This
|
||
|
option defaults to `FALSE`.
|
||
|
|
||
|
### Basic usage
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\Alnum();
|
||
|
if ($validator->isValid('Abcd12')) {
|
||
|
// value contains only allowed chars
|
||
|
} else {
|
||
|
// false
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Using whitespace
|
||
|
|
||
|
By default, whitespace is not accepted as it is not part of the alphabet.
|
||
|
However, if you want to validate complete sentences or phrases, you may need to
|
||
|
allow whitespace; this can be done via the `allowWhiteSpace` option, either at
|
||
|
instantiation or afterwards via the `setAllowWhiteSpace()` method.
|
||
|
|
||
|
To get the current state of the flag, use the `getAllowWhiteSpace()` method.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\Alnum(['allowWhiteSpace' => true]);
|
||
|
|
||
|
// or set it via method call:
|
||
|
$validator->setAllowWhiteSpace(true);
|
||
|
|
||
|
if ($validator->isValid('Abcd and 12')) {
|
||
|
// value contains only allowed chars
|
||
|
} else {
|
||
|
// false
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Using different languages
|
||
|
|
||
|
Several languages supported by ext/intl use alphabets where characters are
|
||
|
formed from multiple bytes, including *Korean*, *Japanese*, and *Chinese*. Such
|
||
|
languages therefore are unsupported with regards to the `Alnum` validator.
|
||
|
|
||
|
When using the `Alnum` validator with these languages, the input will be validated
|
||
|
using the English alphabet.
|
||
|
|
||
|
## Alpha
|
||
|
|
||
|
`Zend\I18n\Validator\Alpha` allows you to validate if a given value contains
|
||
|
only alphabetical characters. There is no length limitation for the input you
|
||
|
want to validate. This validator is identical to the `Zend\I18n\Validator\Alnum`
|
||
|
validator with the exception that it does not accept digits.
|
||
|
|
||
|
### Supported options
|
||
|
|
||
|
The following options are supported for `Zend\I18n\Validator\Alpha`:
|
||
|
|
||
|
- `allowWhiteSpace`: Whether or not whitespace characters are allowed. This
|
||
|
option defaults to `FALSE`.
|
||
|
|
||
|
### Basic usage
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\Alpha();
|
||
|
if ($validator->isValid('Abcd')) {
|
||
|
// value contains only allowed chars
|
||
|
} else {
|
||
|
// false
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Using whitespace
|
||
|
|
||
|
By default, whitespace is not accepted as it is not part of the alphabet.
|
||
|
However, if you want to validate complete sentences or phrases, you may need to
|
||
|
allow whitespace; this can be done via the `allowWhiteSpace` option, either at
|
||
|
instantiation or afterwards via the `setAllowWhiteSpace()` method.
|
||
|
|
||
|
To get the current state of the flag, use the `getAllowWhiteSpace()` method.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\Alpha(['allowWhiteSpace' => true]);
|
||
|
|
||
|
// or set it via method call:
|
||
|
$validator->setAllowWhiteSpace(true);
|
||
|
|
||
|
if ($validator->isValid('Abcd and efg')) {
|
||
|
// value contains only allowed chars
|
||
|
} else {
|
||
|
// false
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Using different languages
|
||
|
|
||
|
When using `Zend\I18n\Validator\Alpha`, the language provided by the user's
|
||
|
browser will be used to set the allowed characters. For locales outside of
|
||
|
English, this means that additional alphabetic characters may be used
|
||
|
— such as `ä`, `ö` and `ü` from the German alphabet.
|
||
|
|
||
|
Which characters are allowed depends completely on the language, as every
|
||
|
language defines its own set of characters.
|
||
|
|
||
|
Three languages supported by ext/intl, however, define multibyte characters,
|
||
|
which cannot be matched as alphabetic characters using normal string or regular
|
||
|
expression options. These include *Korean*, *Japanese*, and *Chinese*.
|
||
|
|
||
|
As a result, when using the `Alpha` validator with these languages, the input
|
||
|
will be validated using the English alphabet.
|
||
|
|
||
|
## IsFloat
|
||
|
|
||
|
`Zend\I18n\Validator\IsFloat` allows you to validate if a given value contains a
|
||
|
floating-point value. This validator takes into account localized input.
|
||
|
|
||
|
### Supported options
|
||
|
|
||
|
The following options are supported for `Zend\I18n\Validator\IsFloat`:
|
||
|
|
||
|
- `locale`: Sets the locale to use when validating localized float values.
|
||
|
|
||
|
### Basic float validation
|
||
|
|
||
|
By default, if no locale is provided, `IsFloat` will use the system locale.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\IsFloat();
|
||
|
|
||
|
$validator->isValid(1234.5); // returns true
|
||
|
$validator->isValid('10a01'); // returns false
|
||
|
$validator->isValid('1,234.5'); // returns true
|
||
|
```
|
||
|
|
||
|
(The above example assumes that the environment locale is set to `en`.)
|
||
|
|
||
|
### Localized float validation
|
||
|
|
||
|
Float values are often written differently based on the country or region. For
|
||
|
example, using English, you might write `1.5`, whereas in german you would write
|
||
|
`1,5`, and in other languages you might use grouping.
|
||
|
|
||
|
`Zend\I18n\Validator\IsFloat` is able to validate such notations. However, it is
|
||
|
limited to the locale you set. See the following code:
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\IsFloat(['locale' => 'de']);
|
||
|
|
||
|
$validator->isValid(1234.5); // returns true
|
||
|
$validator->isValid("1 234,5"); // returns false
|
||
|
$validator->isValid("1.234"); // returns true
|
||
|
```
|
||
|
|
||
|
By using a locale, your input is validated based on the locale provided. Using a
|
||
|
notation not specific to the locale results in a `false` evaulation.
|
||
|
|
||
|
The default validation locale can also be set after instantiation using
|
||
|
`setLocale()`, and retrieved using `getLocale()`.
|
||
|
|
||
|
### Migration from 2.0-2.3 to 2.4+
|
||
|
|
||
|
Version 2.4 adds support for PHP 7. In PHP 7, `float` is a reserved keyword,
|
||
|
which required renaming the `Float` validator. If you were using the `Float`
|
||
|
validator directly previously, you will now receive an `E_USER_DEPRECATED`
|
||
|
notice on instantiation. Please update your code to refer to the `IsFloat` class
|
||
|
instead.
|
||
|
|
||
|
Users pulling their `Float` validator instance from the validator plugin manager
|
||
|
receive an `IsFloat` instance instead starting in 2.4.0.
|
||
|
|
||
|
## IsInt
|
||
|
|
||
|
`Zend\I18n\Validator\IsInt` validates if a given value is an integer, using the
|
||
|
locale provided.
|
||
|
|
||
|
### Supported Options
|
||
|
|
||
|
The following options are supported for `Zend\I18n\Validator\IsInt`:
|
||
|
|
||
|
- `locale`: Sets the locale to use when validating localized integers.
|
||
|
|
||
|
### Basic integer validation
|
||
|
|
||
|
When no locale is provided to the validator, it uses the system locale:
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\IsInt();
|
||
|
|
||
|
$validator->isValid(1234); // returns true
|
||
|
$validator->isValid(1234.5); // returns false
|
||
|
$validator->isValid('1,234'); // returns true
|
||
|
```
|
||
|
|
||
|
(The above example assumes that the environment locale is set to `en`.)
|
||
|
|
||
|
### Localized integer validation
|
||
|
|
||
|
Integer values are often written differently based on country or region. For
|
||
|
example, using English, you may write "1234" or "1,234"; both are integer
|
||
|
values, but the grouping is optional. In German, you'd write "1.234", and in
|
||
|
French, "1 234".
|
||
|
|
||
|
`Zend\I18n\Validator\IsInt` will use a provided locale when evaluating the
|
||
|
validity of an integer value. In such cases, it doesn't simply strip the
|
||
|
validator, but instead validates that the correct separator as defined by the
|
||
|
locale is used.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\IsInt(['locale' => 'de']);
|
||
|
|
||
|
$validator->isValid(1234); // returns true
|
||
|
$validator->isValid("1,234"); // returns false
|
||
|
$validator->isValid("1.234"); // returns true
|
||
|
```
|
||
|
|
||
|
By using a locale, your input is validated based on the locale provided. Using a
|
||
|
notation not specific to the locale results in a `false` evaulation.
|
||
|
|
||
|
The default validation locale can also be set after instantiation using
|
||
|
`setLocale()`, and retrieved using `getLocale()`.
|
||
|
|
||
|
### Migration from 2.0-2.3 to 2.4+
|
||
|
|
||
|
Version 2.4 adds support for PHP 7. In PHP 7, `int` is a reserved keyword, which
|
||
|
required renaming the `Int` validator. If you were using the `Int` validator
|
||
|
directly previously, you will now receive an `E_USER_DEPRECATED` notice on
|
||
|
instantiation. Please update your code to refer to the `IsInt` class instead.
|
||
|
|
||
|
Users pulling their `Int` validator instance from the validator plugin manager
|
||
|
receive an `IsInt` instance instead starting in 2.4.0.
|
||
|
|
||
|
## PostCode
|
||
|
|
||
|
`Zend\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.
|
||
|
|
||
|
`Zend\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.
|
||
|
|
||
|
### Supported options
|
||
|
|
||
|
The following options are supported for `Zend\I18n\Validator\PostCode`:
|
||
|
|
||
|
- `format`: Sets a postcode format which will be used for validation of the
|
||
|
input.
|
||
|
- `locale`: Sets a locale from which the postcode will be taken from.
|
||
|
|
||
|
### Usage
|
||
|
|
||
|
Using a locale is more convenient as zend-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
|
||
|
`Zend\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).
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\PostCode('de_AT');
|
||
|
```
|
||
|
|
||
|
When you don't set a locale yourself, then `Zend\I18n\Validator\PostCode` will
|
||
|
use the application wide set locale, or, when there is none, the locale returned
|
||
|
by `Locale`.
|
||
|
|
||
|
```php
|
||
|
// application wide locale within your bootstrap
|
||
|
Locale::setDefault('de_AT');
|
||
|
|
||
|
$validator = new Zend\I18n\Validator\PostCode();
|
||
|
```
|
||
|
|
||
|
You can also change the locale afterwards by calling `setLocale()`. And of
|
||
|
course you can get the actual used locale by calling `getLocale()`.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\PostCode('de_AT');
|
||
|
$validator->setLocale('en_GB');
|
||
|
```
|
||
|
|
||
|
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()`.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\PostCode('de_AT');
|
||
|
$validator->setFormat('AT-\d{5}');
|
||
|
```
|
||
|
|
||
|
> ### 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.
|
||
|
|
||
|
### Constructor options
|
||
|
|
||
|
At its most basic, you may pass a string representing a fully qualified locale
|
||
|
to the constructor of `Zend\I18n\Validator\PostCode`.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\PostCode('de_AT');
|
||
|
```
|
||
|
|
||
|
Additionally, you may pass either an array or a `Traversable` instance to the
|
||
|
constructor. When you do so, you must include either the key `locale` or
|
||
|
`format`; these will be used to set the appropriate values in the validator
|
||
|
object.
|
||
|
|
||
|
```php
|
||
|
$validator = new Zend\I18n\Validator\PostCode([
|
||
|
'locale' => 'de_AT',
|
||
|
'format' => 'AT_\d+'
|
||
|
]);
|
||
|
```
|