90 lines
2.2 KiB
PHP
90 lines
2.2 KiB
PHP
<?php
|
||
|
||
class RegisterValidator
|
||
{
|
||
private $login = '';
|
||
private $email = '';
|
||
private $password = '';
|
||
private $birthday = '';
|
||
private $sex = 0;
|
||
|
||
public function setLogin($login)
|
||
{
|
||
$login = preg_replace('!\s+!', ' ', $login); // remove inner spaces
|
||
$login = trim($login); // remove outer spaces
|
||
if (
|
||
$this->loginIsAllowed($login) &&
|
||
!$this->loginIsMixed($login) &&
|
||
mb_strlen($login < 2) &&
|
||
mb_strlen($login) > 16 &&
|
||
!strpos("!@#$%^&*()\+|/'\"", $login)
|
||
) {
|
||
$this->login = $login;
|
||
}
|
||
return $this;
|
||
}
|
||
|
||
private function loginIsAllowed($login)
|
||
{
|
||
$disallowed = [
|
||
'Мироздатель',
|
||
'Мусорщик',
|
||
'Комментатор',
|
||
];
|
||
$d = implode('|', $disallowed);
|
||
$pattern = "/\b($d)\b/iu";
|
||
return !preg_match($pattern, $login);
|
||
}
|
||
|
||
private function loginIsMixed($login)
|
||
{
|
||
$en = preg_match("/^(([0-9A-z -])+)$/iu", $login);
|
||
$ru = preg_match("/^([а-яёіїє\s\d]*)$/iu", $login);
|
||
return ($ru && $en) || (!$ru && !$en);
|
||
}
|
||
|
||
public function setEmail($email)
|
||
{
|
||
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||
$this->email = $email;
|
||
}
|
||
return $this;
|
||
}
|
||
|
||
public function setPassword($password, $passwordVerify)
|
||
{
|
||
if ($this->password === $passwordVerify && mb_strlen($password) > 3) {
|
||
$this->password = md5($password);
|
||
}
|
||
return $this;
|
||
}
|
||
|
||
public function setBirthday($birthday)
|
||
{
|
||
$bdate = DateTime::createFromFormat('Y-m-d', $birthday);
|
||
if ($bdate) {
|
||
$this->birthday = $bdate->format('d.m.Y');
|
||
}
|
||
return $this;
|
||
}
|
||
|
||
public function setSex($sex)
|
||
{
|
||
if ((int)$sex > 0) {
|
||
$this->sex = $sex;
|
||
}
|
||
return $this;
|
||
}
|
||
|
||
public function get()
|
||
{
|
||
return [
|
||
'login' => $this->login,
|
||
'email' => $this->email,
|
||
'password' => $this->password,
|
||
'birthday' => $this->birthday,
|
||
'sex' => $this->sex,
|
||
];
|
||
}
|
||
}
|