mirror of
https://github.com/Respect/Validation.git
synced 2026-03-17 23:59:51 +01:00
There's no reason not to make this method public. It will actually be easier for users to test their rules when they extend this class if this method is public.
50 lines
1.2 KiB
PHP
50 lines
1.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Respect\Validation\Rules;
|
|
|
|
use Attribute;
|
|
use Respect\Validation\Helpers\CanValidateUndefined;
|
|
use Respect\Validation\Helpers\DomainInfo;
|
|
use Respect\Validation\Message\Template;
|
|
use Respect\Validation\Rules\Core\Simple;
|
|
|
|
use function array_pop;
|
|
use function explode;
|
|
use function in_array;
|
|
use function is_scalar;
|
|
use function strtoupper;
|
|
|
|
#[Attribute(Attribute::TARGET_PROPERTY | Attribute::IS_REPEATABLE)]
|
|
#[Template(
|
|
'{{name}} must be a public domain suffix',
|
|
'{{name}} must not be a public domain suffix',
|
|
)]
|
|
final class PublicDomainSuffix extends Simple
|
|
{
|
|
use CanValidateUndefined;
|
|
|
|
public function isValid(mixed $input): bool
|
|
{
|
|
if (!is_scalar($input)) {
|
|
return false;
|
|
}
|
|
|
|
$parts = explode('.', (string) $input);
|
|
$tld = array_pop($parts);
|
|
|
|
$domainInfo = new DomainInfo($tld);
|
|
$dataSource = $domainInfo->getPublicSuffixes();
|
|
if ($this->isUndefined($input) && empty($dataSource)) {
|
|
return true;
|
|
}
|
|
|
|
return in_array(strtoupper((string) $input), $dataSource, true);
|
|
}
|
|
}
|