respect-validation/library/Rules/AbstractFilterRule.php
2018-01-28 17:38:36 +01:00

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);
}
}