20) { $error = 'Логин должен содержать не более 20 символов.'; } if (strlen($login) < 4) { $error = 'Логин должен содержать не менее 4 символов.'; } if ($this->hasMixedLatCur($login)) { $error = 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.'; } //Разделители if (substr_count($login, ' ') + substr_count($login, '-') + substr_count($login, '_') > 2) { $error = 'Не более двух разделителей одновременно (пробел, тире, нижнее подчеркивание).'; } if (!empty($error)) { $error .= '
Пример правильного никнейма: Петя Убиватор, Коля, xalop.
Пример неправильного никнейма: )))), kolя)=-/.'; } if ($isRegistered || $wasRegistered || $isRestricted) { $error = 'Логин ' . $login . ' уже занят, выберите другой.'; } return $error ?? ''; } public function hasGoodEmail(string $email): string { $isRegistered = Db::getValue('select count(*) from users where mail = ?', [$email]); $isBlocked = Db::getValue('select count(*) from ban_email where email = ?', [$email]); if (!filter_var($email, FILTER_VALIDATE_EMAIL) || $isRegistered) { $error = 'Неправильный email.'; } if ($isBlocked) { $error = 'Адрес заблокирован.'; } $allowedDomains = Db::getColumn('select email from trust_email'); $domain = explode('@', $email)[1]; if (!in_array($domain, $allowedDomains)) { $error = 'Данный почтовый сервис использовать нельзя.'; } return $error ?? ''; } public function hasGoodEmailCode(string $email, int $code): string { $check = Db::getValue('select code from secure_code where email = ?', [$email]); if ($code !== $check) { return 'Неверный проверочный код.'; } return ''; } public function hasGoodPassword(string $password1, string $password2): string { if ($password1 !== $password2) { $error = 'Пароли не совпадают'; } if (strlen($password1 < 8)) { $error = 'Пароль должен быть больше 8 символов'; $error .= 'Можете использовать сгенерированный пароль: ' . PassGen::new(); } return $error ?? ''; } public static function new(string $login, string $password, string $email, $ref, $birthday, $sex): string { $password = password_hash($password, PASSWORD_DEFAULT); $ip = UserIp::get(); $sex = (int)$sex - 10; //На входе 10\11, а передать надо 0\1. Db::sql( 'insert into users (users.real,login,host_reg,pass,ip,ipreg,room,timereg,mail,bithday,sex,fnq,molch2,level,hobby,clan_zv) values (1,?,?,?,?,?,9,unix_timestamp(),?,?,?,0,unix_timestamp() + 86400,8,\'\',0)', [ $login, $ref ?? '', $password, $ip, $ip, $email, date('d.m.Y', strtotime($birthday)), $sex, ] ); return Db::lastInsertId(); } }