From af9f9a6970f2499afb87b686aec5f05a0c85f151 Mon Sep 17 00:00:00 2001 From: Ivor Barhansky Date: Wed, 24 Apr 2024 16:03:48 +0000 Subject: [PATCH] Update RegisterValidator.php --- RegisterValidator.php | 64 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/RegisterValidator.php b/RegisterValidator.php index 2c8a6fd..f047e4e 100644 --- a/RegisterValidator.php +++ b/RegisterValidator.php @@ -10,6 +10,7 @@ class RegisterValidator private $disallowedLogins = ['admin', 'moderator',]; private $loginLength = ['min' => 2, 'max' => 16]; private $passwordLength = 3; + private $minimumAge = 16; public function setDisallowedLogins(array $disallowedLogins) { @@ -32,7 +33,28 @@ class RegisterValidator $this->loginLength = ['min' => $min, 'max' => $max]; } } + + public function setMinimumAge($years) + { + $years = (int)$years; + if ($years > 0) { + $this->minimumAge = $years; + } + } + /** + * Работа с логином. + * + * 1. Убираем множественные пробелы между словами + * 2. Убираем проблемы перед и после. + * 3. Проверяем можно ли использовать логин сравнивая со списком разрешенных. + * 4. Проверяем нет ли в логине одинаково выглядящих букв из разных раскладок. + * 5. Проверяем минимальный и максимальный размер. + * 6. Проверяем запрещённые символы. + * + * @param $login + * @return $this + */ public function setLogin($login) { $login = preg_replace('!\s+!', ' ', $login); // remove inner spaces @@ -63,6 +85,12 @@ class RegisterValidator return ($ru && $en) || (!$ru && !$en); } + /** + * Проверяем почту встроенным валидатором. Его хватает для большинства задач. + * + * @param $email + * @return $this + */ public function setEmail($email) { if (filter_var($email, FILTER_VALIDATE_EMAIL)) { @@ -71,6 +99,19 @@ class RegisterValidator return $this; } + /** + * Проверяем пароли. + * + * 1. Два пароля должны совпадать. + * 2. Пароль должен быть заданной длинны. + * 3. Если с паролем всё ок, оборачиваем его в md5() + * + * !!! Это очень ненадёжно. Уже давно стоит перейти на password_hash() / password_verify() + * + * @param $password + * @param $passwordVerify + * @return $this + */ public function setPassword($password, $passwordVerify) { if ($this->password === $passwordVerify && mb_strlen($password) >= $this->passwordLength) { @@ -79,10 +120,21 @@ class RegisterValidator return $this; } + /** + * Проверяем дату рождения. + * + * 1. Входящая строка должна быть реально существующей датой. + * 2. Эта дата должна быть больше чем минимальный возраст игрока. + * + * @param $birthday + * @return $this + */ public function setBirthday($birthday) { $bdate = DateTime::createFromFormat('Y-m-d', $birthday); - if ($bdate) { + $today = new DateTime(); + $interval = $today->diff($bdate); + if ($bdate && $interval->y >= $this->minimumAge) { $this->birthday = $bdate->format('d.m.Y'); } return $this; @@ -120,13 +172,17 @@ $rv->setDisallowedLogins([ 'Комментатор', ]); -# необязательный параметр, по умолчанию 16. +# Длинна логина. Необязательный параметр, по умолчанию 16. Можно указать второе число - минимальную длинну. $rv->setLoginLength(16); +$rv->setLoginLength(16, 3); -# необязательный параметр, по умолчанию 3. +# Длинна пароля. Необязательный параметр, по умолчанию 3. $rv->setPasswordLength(3); -# проверяем введённые значения и записываем результат в массив если всё ок, или пустую строку, если не ок. +# Минимальный возраст игрока. Необязательный параметр, по умолчанию 16. +$rv->setMinimumAge(16); + +# Проверяем введённые значения и записываем результат в массив если всё ок, или пустую строку, если не ок. # [login->string, email->string, password->md5(string), birthday->dd.mm.YYYY, sex->int] # birthday заточен под , если надо в том формате, что сейчас, надо записывать в него: