mirror of
https://github.com/Respect/Validation.git
synced 2024-05-16 21:26:40 +02:00
Compare commits
2 commits
fb322df1da
...
955405b997
Author | SHA1 | Date | |
---|---|---|---|
955405b997 | |||
788939e359 |
|
@ -2,7 +2,7 @@
|
|||
|
||||
- `HexRgbColor()`
|
||||
|
||||
Validates weather the input is a hex RGB color or not.
|
||||
Validates whether the input is a hex RGB color or not.
|
||||
|
||||
```php
|
||||
v::hexRgbColor()->validate('#FFFAAA'); // true
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
# Phone
|
||||
|
||||
- `Phone()`
|
||||
- `Phone(string $countyCode)`
|
||||
|
||||
Validates whether the input is a valid phone number. This rule requires
|
||||
the `giggsey/libphonenumber-for-php-lite` package.
|
||||
|
||||
Validates whether the input is a valid phone number.
|
||||
|
||||
```php
|
||||
v::phone()->validate('+1 650 253 00 00'); // true
|
||||
|
@ -12,16 +11,20 @@ v::phone('BR')->validate('+55 11 91111 1111'); // true
|
|||
v::phone('BR')->validate('11 91111 1111'); // false
|
||||
```
|
||||
|
||||
## Note
|
||||
|
||||
When validating with `$countryCode`, this rule will require the `giggsey/libphonenumber-for-php-lite` package.
|
||||
|
||||
## Categorization
|
||||
|
||||
- Strings
|
||||
|
||||
## Changelog
|
||||
|
||||
Version | Description
|
||||
--------|-------------
|
||||
2.3.0 | Updated to use external validator
|
||||
0.5.0 | Created
|
||||
| Version | Description |
|
||||
|--------:|-------------------------------------|
|
||||
| 2.3.0 | Introduced a validation per country |
|
||||
| 0.5.0 | Created |
|
||||
|
||||
***
|
||||
See also:
|
||||
|
|
|
@ -10,7 +10,7 @@ declare(strict_types=1);
|
|||
namespace Respect\Validation\Rules;
|
||||
|
||||
/**
|
||||
* Validates weather the input is a hex RGB color or not.
|
||||
* Validates whether the input is a hex RGB color or not.
|
||||
*
|
||||
* @author Davide Pastore <pasdavide@gmail.com>
|
||||
* @author Henrique Moody <henriquemoody@gmail.com>
|
||||
|
|
|
@ -14,8 +14,8 @@ use libphonenumber\PhoneNumberUtil;
|
|||
use Respect\Validation\Exceptions\ComponentException;
|
||||
|
||||
use function class_exists;
|
||||
use function is_null;
|
||||
use function is_scalar;
|
||||
use function preg_match;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
|
@ -24,6 +24,9 @@ use function sprintf;
|
|||
* Validates an international or country-specific telephone number
|
||||
*
|
||||
* @author Alexandre Gomes Gaigalas <alganet@gmail.com>
|
||||
* @author Danilo Correa <danilosilva87@gmail.com>
|
||||
* @author Graham Campbell <graham@mineuk.com>
|
||||
* @author Henrique Moody <henriquemoody@gmail.com>
|
||||
*/
|
||||
final class Phone extends AbstractRule
|
||||
{
|
||||
|
@ -32,20 +35,15 @@ final class Phone extends AbstractRule
|
|||
*/
|
||||
private $countryCode;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function __construct(?string $countryCode = null)
|
||||
{
|
||||
$this->countryCode = $countryCode;
|
||||
if ($countryCode === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!is_null($countryCode) && !(new CountryCode())->validate($countryCode)) {
|
||||
throw new ComponentException(
|
||||
sprintf(
|
||||
'Invalid country code %s',
|
||||
$countryCode
|
||||
)
|
||||
);
|
||||
if (!(new CountryCode())->validate($countryCode)) {
|
||||
throw new ComponentException(sprintf('Invalid country code %s', $countryCode));
|
||||
}
|
||||
|
||||
if (!class_exists(PhoneNumberUtil::class)) {
|
||||
|
@ -53,21 +51,32 @@ final class Phone extends AbstractRule
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function validate($input): bool
|
||||
{
|
||||
if (!is_scalar($input)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->countryCode === null) {
|
||||
return preg_match($this->getPregFormat(), (string) $input) > 0;
|
||||
}
|
||||
|
||||
try {
|
||||
return PhoneNumberUtil::getInstance()->isValidNumber(
|
||||
PhoneNumberUtil::getInstance()->parse((string) $input, $this->countryCode)
|
||||
);
|
||||
} catch (NumberParseException $e) {
|
||||
} catch (NumberParseException) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private function getPregFormat(): string
|
||||
{
|
||||
return sprintf(
|
||||
'/^\+?(%1$s)? ?(?(?=\()(\(%2$s\) ?%3$s)|([. -]?(%2$s[. -]*)?%3$s))$/',
|
||||
'\d{0,3}',
|
||||
'\d{1,3}',
|
||||
'((\d{3,5})[. -]?(\d{2}[. -]?\d{2})|(\d{2}[. -]?){4})'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,52 @@ final class PhoneTest extends RuleTestCase
|
|||
[new Phone(), '+7 (999) 999-99-99'],
|
||||
[new Phone(), '+7(999)999-99-99'],
|
||||
[new Phone(), '+7(999)999-9999'],
|
||||
[new Phone(), '+5-555-555-5555'],
|
||||
[new Phone(), '+5 555 555 5555'],
|
||||
[new Phone(), '+5.555.555.5555'],
|
||||
[new Phone(), '5-555-555-5555'],
|
||||
[new Phone(), '5.555.555.5555'],
|
||||
[new Phone(), '5 555 555 5555'],
|
||||
[new Phone(), '555.555.5555'],
|
||||
[new Phone(), '555 555 5555'],
|
||||
[new Phone(), '555-555-5555'],
|
||||
[new Phone(), '555-5555555'],
|
||||
[new Phone(), '5(555)555.5555'],
|
||||
[new Phone(), '+5(555)555.5555'],
|
||||
[new Phone(), '+5(555)555 5555'],
|
||||
[new Phone(), '+5(555)555-5555'],
|
||||
[new Phone(), '+5(555)5555555'],
|
||||
[new Phone(), '(555)5555555'],
|
||||
[new Phone(), '(555)555.5555'],
|
||||
[new Phone(), '(555)555-5555'],
|
||||
[new Phone(), '(555) 555 5555'],
|
||||
[new Phone(), '55555555555'],
|
||||
[new Phone(), '5555555555'],
|
||||
[new Phone(), '+33(1)2222222'],
|
||||
[new Phone(), '+33(1)222 2222'],
|
||||
[new Phone(), '+33(1)222.2222'],
|
||||
[new Phone(), '+33(1)22 22 22 22'],
|
||||
[new Phone(), '33(1)2222222'],
|
||||
[new Phone(), '33(1)22222222'],
|
||||
[new Phone(), '33(1)22 22 22 22'],
|
||||
[new Phone(), '(020) 7476 4026'],
|
||||
[new Phone(), '33(020) 7777 7777'],
|
||||
[new Phone(), '33(020)7777 7777'],
|
||||
[new Phone(), '+33(020) 7777 7777'],
|
||||
[new Phone(), '+33(020)7777 7777'],
|
||||
[new Phone(), '03-6106666'],
|
||||
[new Phone(), '036106666'],
|
||||
[new Phone(), '+33(11) 97777 7777'],
|
||||
[new Phone(), '+3311977777777'],
|
||||
[new Phone(), '11977777777'],
|
||||
[new Phone(), '11 97777 7777'],
|
||||
[new Phone(), '(11) 97777 7777'],
|
||||
[new Phone(), '(11) 97777-7777'],
|
||||
[new Phone(), '555-5555'],
|
||||
[new Phone(), '5555555'],
|
||||
[new Phone(), '555.5555'],
|
||||
[new Phone(), '555 5555'],
|
||||
[new Phone(), '+1 (555) 555 5555'],
|
||||
[new Phone('BR'), '+55 11 91111 1111'],
|
||||
[new Phone('BR'), '11 91111 1111'], // no international prefix
|
||||
[new Phone('BR'), '+5511911111111'], // no whitespace
|
||||
|
@ -68,6 +114,35 @@ final class PhoneTest extends RuleTestCase
|
|||
public static function providerForInvalidInput(): array
|
||||
{
|
||||
return [
|
||||
[new Phone(), ''],
|
||||
[new Phone(), '123'],
|
||||
[new Phone(), '(11- 97777-7777'],
|
||||
[new Phone(), '-11) 97777-7777'],
|
||||
[new Phone(), 's555-5555'],
|
||||
[new Phone(), '555-555'],
|
||||
[new Phone(), '555555'],
|
||||
[new Phone(), '555+5555'],
|
||||
[new Phone(), '(555)555555'],
|
||||
[new Phone(), '(555)55555'],
|
||||
[new Phone(), '+(555)555 555'],
|
||||
[new Phone(), '+5(555)555 555'],
|
||||
[new Phone(), '+5(555)555 555 555'],
|
||||
[new Phone(), '555)555 555'],
|
||||
[new Phone(), '+5(555)5555 555'],
|
||||
[new Phone(), '(555)55 555'],
|
||||
[new Phone(), '(555)5555 555'],
|
||||
[new Phone(), '+5(555)555555'],
|
||||
[new Phone(), '5(555)55 55555'],
|
||||
[new Phone(), '(5)555555'],
|
||||
[new Phone(), '+55(5)55 5 55 55'],
|
||||
[new Phone(), '+55(5)55 55 55 5'],
|
||||
[new Phone(), '+55(5)55 55 55'],
|
||||
[new Phone(), '+55(5)5555 555'],
|
||||
[new Phone(), '+55()555 5555'],
|
||||
[new Phone(), '03610666-5'],
|
||||
[new Phone(), 'text'],
|
||||
[new Phone(), "555\n5555"],
|
||||
[new Phone(), []],
|
||||
[new Phone(), '+1-650-253-00-0'],
|
||||
[new Phone('BR'), '+1 11 91111 1111'], // invalid + code for BR
|
||||
];
|
||||
|
|
Loading…
Reference in a new issue