mirror of
https://github.com/Respect/Validation.git
synced 2024-06-29 02:30:06 +02:00
54 lines
1.3 KiB
PHP
54 lines
1.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Respect/Validation.
|
|
*
|
|
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
|
|
*
|
|
* For the full copyright and license information, please view the "LICENSE.md"
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Respect\Validation\Rules;
|
|
|
|
use Respect\Validation\Exceptions\ComponentException;
|
|
|
|
abstract class AbstractFilterRule extends AbstractRule
|
|
{
|
|
public $additionalChars = '';
|
|
|
|
abstract protected function validateClean($input);
|
|
|
|
public function __construct($additionalChars = '')
|
|
{
|
|
if (!is_string($additionalChars)) {
|
|
throw new ComponentException('Invalid list of additional characters to be loaded');
|
|
}
|
|
|
|
$this->additionalChars .= $additionalChars;
|
|
}
|
|
|
|
protected function filter($input)
|
|
{
|
|
return str_replace(str_split($this->additionalChars), '', $input);
|
|
}
|
|
|
|
public function validate($input): bool
|
|
{
|
|
if (!is_scalar($input)) {
|
|
return false;
|
|
}
|
|
|
|
$stringInput = (string) $input;
|
|
if ('' === $stringInput) {
|
|
return false;
|
|
}
|
|
|
|
$cleanInput = $this->filter($stringInput);
|
|
|
|
return '' === $cleanInput || $this->validateClean($cleanInput);
|
|
}
|
|
}
|