<?php
class ValidSymbolValidator implements ValidatorRuleInterface
{
private string $format = 'В этом поле можно использовать следующие символы: %s. Вы использовали символ(ы), который не входит в этот список, а именно - %s.';
private string $pattern;
private string $verbalDescriptionOfPattern;
public function __construct(string $pattern, string $verbalDescriptionOfPattern)
{
$this->pattern = $pattern;
$this->verbalDescriptionOfPattern = $verbalDescriptionOfPattern;
}
public function __invoke(mixed $value): ?ValidationError
{
$numberOfCharacters = iconv_strlen($value);
for($i = 0; $i < $numberOfCharacters; $i++) {
$letter = mb_substr($value, $i, 1);
$result = preg_match($this->pattern, $letter);
if (!$result) {
if ($letter === " ") {
$invalidSymbols [] = "пробел";
} elseif ($letter === ",") {
$invalidSymbols [] = "запятая";
} else {
$invalidSymbols [] = $letter;
}
}
}
if ($invalidSymbols) {
$invalidSymbols = array_unique($invalidSymbols);
$invalidSymbols = implode(", ", $invalidSymbols);
$errorText = sprintf(
$this->format,
$this->verbalDescriptionOfPattern,
$invalidSymbols
);
return new ValidationError($errorText);
} else {
return null;
}
}
}
preferences:
27.9 ms | 408 KiB | 5 Q