Update RegisterValidator.php

This commit is contained in:
Ivor Barhansky 2024-04-24 15:37:37 +00:00
parent 30e5f89118
commit c9ba9acc3f
1 changed files with 61 additions and 9 deletions

View File

@ -7,6 +7,31 @@ class RegisterValidator
private $password = ''; private $password = '';
private $birthday = ''; private $birthday = '';
private $sex = 0; private $sex = 0;
private $disallowedLogins = ['admin', 'moderator',];
private $loginLength = ['min' => 2, 'max' => 16];
private $passwordLength = 3;
public function setDisallowedLogins(array $disallowedLogins)
{
$this->disallowedLogins = $disallowedLogins;
}
public function setPasswordLength($max)
{
$max = (int)$max;
if ($max > 0) {
$this->passwordLength = $max;
}
}
public function setLoginLength($max, $min = 2)
{
$max = (int)$max;
$min = (int)$min;
if ($max > 0 && $min > 0 && $max > $min) {
$this->loginLength = ['min' => $min, 'max' => $max];
}
}
public function setLogin($login) public function setLogin($login)
{ {
@ -15,8 +40,8 @@ class RegisterValidator
if ( if (
$this->loginIsAllowed($login) && $this->loginIsAllowed($login) &&
!$this->loginIsMixed($login) && !$this->loginIsMixed($login) &&
mb_strlen($login < 2) && mb_strlen($login <= $this->loginLength['min']) &&
mb_strlen($login) > 16 && mb_strlen($login) >= $this->loginLength['max'] &&
!strpos("!@#$%^&*()\+|/'\"", $login) !strpos("!@#$%^&*()\+|/'\"", $login)
) { ) {
$this->login = $login; $this->login = $login;
@ -26,12 +51,7 @@ class RegisterValidator
private function loginIsAllowed($login) private function loginIsAllowed($login)
{ {
$disallowed = [ $d = implode('|', $this->disallowedLogins);
'Мироздатель',
'Мусорщик',
'Комментатор',
];
$d = implode('|', $disallowed);
$pattern = "/\b($d)\b/iu"; $pattern = "/\b($d)\b/iu";
return !preg_match($pattern, $login); return !preg_match($pattern, $login);
} }
@ -53,7 +73,7 @@ class RegisterValidator
public function setPassword($password, $passwordVerify) public function setPassword($password, $passwordVerify)
{ {
if ($this->password === $passwordVerify && mb_strlen($password) > 3) { if ($this->password === $passwordVerify && mb_strlen($password) >= $this->passwordLength) {
$this->password = md5($password); $this->password = md5($password);
} }
return $this; return $this;
@ -87,3 +107,35 @@ class RegisterValidator
]; ];
} }
} }
## написано под PHP 5.6
## использование:
require_once 'path/to/RegisterValidator.php';
$rv = new RegisterValidator();
# обязательно
$rv->setDisallowedLogins([
'Мироздатель',
'Мусорщик',
'Комментатор',
]);
# необязательный параметр, по умолчанию 16.
$rv->setLoginLength(16);
# необязательный параметр, по умолчанию 3.
$rv->setPasswordLength(3);
# проверяем введённые значения и записываем результат в массив если всё ок, или пустую строку, если не ок.
# [login->string, email->string, password->md5(string), birthday->dd.mm.YYYY, sex->int]
# birthday заточен под <input type=date>, если надо в том формате, что сейчас, надо записывать в него:
# $birthday = "$yy-$mm-$dd";
$values = $rv
->setLogin($login)
->setPassword($pass1, $pass2)
->setEmail($email)
->setBirthday($birthday)
->setSex($sex)
->get();