Единый валидатор имён.

This commit is contained in:
2024-04-30 19:08:09 +03:00
parent 078cb49669
commit bfc075010d
6 changed files with 157 additions and 377 deletions
+67
View File
@@ -0,0 +1,67 @@
<?php
namespace Validator;
class Login
{
private const RESTRICTED = [
'ангел', 'angel', 'администрация', 'administration', 'Комментатор',
'Мироздатель', 'Мусорщик', 'Падальщик', 'Повелитель',
'Архивариус', 'Пересмешник', 'Волынщик', 'Лорд Разрушитель',
'Милосердие', 'Справедливость', 'Искушение', 'Вознесение',
];
public const LENGTH = ['min' => 4, 'max' => 16];
protected readonly string $login;
private int $errorcode = 0;
public function getErrorCode(): int
{
return $this->errorcode;
}
public function setLogin(string $login): self
{
$login = preg_replace('!\s+!', ' ', $login); // remove inner spaces
$login = trim($login); // remove outer spaces
$this->login = $login;
return $this;
}
public function get(): string
{
return $this->check() ? $this->login : '';
}
public function check(): bool
{
if (!$this->isAllowed()) {
$this->errorcode = 1;
} elseif ($this->isMixed()) {
$this->errorcode = 2;
} elseif (mb_strlen($this->login) < self::LENGTH['min']) {
$this->errorcode = 3;
} elseif (mb_strlen($this->login) > self::LENGTH['max']) {
$this->errorcode = 4;
} elseif (substr_count($this->login, ' ') + substr_count($this->login, '-') + substr_count($this->login, '_') > 2) {
$this->errorcode = 5;
} elseif (strpos("!@#$%^&*()\+|/'\"", $this->login) || empty($this->login)) {
$this->errorcode = 6;
}
return $this->errorcode === 0;
}
private function isAllowed(): bool
{
$d = implode('|', self::RESTRICTED);
$pattern = "/\b($d)\b/iu";
return !preg_match($pattern, $this->login);
}
private function isMixed(): bool
{
$en = preg_match("/^(([0-9A-z -])+)$/iu", $this->login);
$ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $this->login);
return ($ru && $en) || (!$ru && !$en);
}
}