Единый валидатор имён.
This commit is contained in:
@@ -57,12 +57,6 @@ class Register
|
||||
'effects' => [8, 20, 25, 37, 38, 283, 296, 412, 472],
|
||||
],
|
||||
];
|
||||
private array $restrictedLogins = [
|
||||
'ангел', 'angel', 'администрация', 'administration', 'Комментатор',
|
||||
'Мироздатель', 'Мусорщик', 'Падальщик', 'Повелитель',
|
||||
'Архивариус', 'Пересмешник', 'Волынщик', 'Лорд Разрушитель',
|
||||
'Милосердие', 'Справедливость', 'Искушение', 'Вознесение',
|
||||
];
|
||||
|
||||
public function hasGoodEmail(string $email): bool
|
||||
{
|
||||
@@ -141,40 +135,30 @@ class Register
|
||||
|
||||
public function hasGoodLogin(string $login): bool
|
||||
{
|
||||
$isRestricted = in_array($login, $this->restrictedLogins);
|
||||
$isRegistered = Db::getValue('select count(*) from users where login = ?', [$login]);
|
||||
//Бывшие в употреблении логины. Дичь, но ладно.
|
||||
$wasRegistered = Db::getValue('select count(*) from lastnames where login = ?', [$login]);
|
||||
$login = str_replace(' ', ' ', $login);
|
||||
if (mb_strlen($login) > 20) {
|
||||
$this->error = 'Логин должен содержать не более 20 символов.';
|
||||
}
|
||||
if (mb_strlen($login) < 4) {
|
||||
$this->error = 'Логин должен содержать не менее 4 символов.';
|
||||
}
|
||||
if ($this->hasMixedLatCur($login)) {
|
||||
$this->error = 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.';
|
||||
}
|
||||
if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) {
|
||||
$this->error = 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).';
|
||||
}
|
||||
if (!empty($this->error)) {
|
||||
$validator = (new \Validator\Login())->setLogin($login);
|
||||
if (!$validator->check()) {
|
||||
$this->error = match ($validator->getErrorCode()) {
|
||||
1 => 'Логин ' . $login . ' уже занят, выберите другой.',
|
||||
2 => 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.',
|
||||
3 => 'Логин должен содержать не менее ' . $validator::LENGTH['min'] . ' символов.',
|
||||
4 => 'Логин должен содержать не более ' . $validator::LENGTH['max'] . ' символов.',
|
||||
5 => 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).',
|
||||
6 => 'В логине используются запрещённые символы.',
|
||||
};
|
||||
$this->error .= '<br>Пример правильного никнейма: Петя Убиватор, Коля, xalop.<br>Пример неправильного никнейма: )))), kolя)=-/.';
|
||||
}
|
||||
if ($isRegistered || $wasRegistered || $isRestricted) {
|
||||
$this->error = 'Логин ' . $login . ' уже занят, выберите другой.';
|
||||
} else {
|
||||
$login = $validator->get();
|
||||
$isRegistered = Db::getValue('select count(*) from users where login = ?', [$login]);
|
||||
//Бывшие в употреблении логины. Дичь, но ладно.
|
||||
$wasRegistered = Db::getValue('select count(*) from lastnames where login = ?', [$login]);
|
||||
if ($isRegistered || $wasRegistered) {
|
||||
$this->error = 'Логин ' . $login . ' уже занят, выберите другой.';
|
||||
}
|
||||
}
|
||||
|
||||
return !$this->error;
|
||||
}
|
||||
|
||||
public function hasMixedLatCur(string $txt): bool
|
||||
{
|
||||
$en = preg_match("/^(([0-9A-z -])+)$/iu", $txt);
|
||||
$ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $txt);
|
||||
return ($ru && $en) || (!$ru && !$en);
|
||||
}
|
||||
|
||||
private function setCookies($login): void
|
||||
{
|
||||
setcookie('login', 1, 1, '/', Config::get('host'), true);
|
||||
|
||||
Reference in New Issue
Block a user