Единый валидатор имён.

This commit is contained in:
2024-04-30 19:08:09 +03:00
parent 078cb49669
commit bfc075010d
6 changed files with 157 additions and 377 deletions
+26 -89
View File
@@ -1,102 +1,39 @@
<?php
//Вызывается из ekr.php
define('GAME', true);
//fixme Технически это всратое API и ему самое место в API.
use Core\Db;
use Validator\Login;
const GAME = true;
include_once('_incl_data/__config.php');
include_once('_incl_data/class/__db_connect.php');
if (!isset($_GET['login'])) {
return;
}//
}
$_GET['login'] = htmlspecialchars($_GET['login'], null);
//
$bad = [
'Мусорщик' => 1,
'Мироздатель' => 1,
];
//
function en_ru($txt)
{
$g = false;
$en = preg_match("/^(([0-9a-zA-Z _-])+)$/i", $txt);
$ru = preg_match("/^(([0-9а-яА-Я _-])+)$/i", $txt);
if (($ru && $en) || (!$ru && !$en)) {
$g = true;
}
return $g;
}
//
function testBad($txt): bool
{
$white = '-_ 0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю';
$r = false;
$i = 0;
while ($i != -1) {
if (isset($txt[$i])) {
$g = false;
$j = 0;
while ($j != -1) {
if (isset($white[$j])) {
if ($white[$j] == $txt[$i]) {
$g = true;
}
} else {
$j = -2;
}
$j++;
}
if ($g == false) {
$r = true;
}
} else {
$i = -2;
$validator = new class extends Login {
private function exist(): bool
{
return Db::getValue('select count(login) from users where login = ?', [$this->login]) > 0;
}
public function getstatus(): string
{
if ($this->exist()) {
return '<b style="color:red">Логин занят.</b>';
}
$i++;
if (parent::check()) {
return '<b style="color:green">Логин свободен!</b>';
}
return '<b style="color:red">Неверный логин.</b>';
}
return $r;
}
};
//
$login = mysql_fetch_array(
mysql_query(
'SELECT `id` FROM `users` WHERE `login` = "' . mysql_real_escape_string($_GET['login']) . '" LIMIT 1'
)
);
if (isset($login['id']) || isset($bad[$_GET['login']])) {
echo '<b style="color:red">Логин занят.</b>';
} else {
$true = true;
echo $validator->setLogin($_GET['login'])->getstatus();
/*
Логин может содержать от 4 до 16 символов, и состоять только из букв русского ИЛИ английского алфавита, цифр, символов '_', '-' и пробела.
Логин не может начинаться или заканчиваться символами '_', '-' или пробелом.
*/
$_GET['login'] = str_replace(' ', ' ', $_GET['login']);
$_GET['login'] = str_replace('%', ' ', $_GET['login']);
$_GET['login'] = str_replace('&nbsp;', ' ', $_GET['login']);
//
if (strlen($_GET['login']) > 16) {
$true = false;
} elseif (strlen($_GET['login']) < 4) {
$true = false;
} elseif (strripos($_GET['login'], ' ')) {
$true = false;
} elseif (substr($_GET['login'], 1) == ' ' || substr($_GET['login'], -1) == ' ') {
$true = false;
} elseif (substr($_GET['login'], 1) == '-' || substr($_GET['login'], -1) == '-') {
$true = false;
} elseif (substr($_GET['login'], 1) == '_' || substr($_GET['login'], -1) == '_') {
$true = false;
} elseif (testBad($_GET['login'])) {
$true = false;
} elseif (en_ru(str_replace('ё', 'е', str_replace('Ё', 'Е', $_GET['login'])))) {
$true = false;
}
//
if (!$true) {
echo '<b style="color:red">Неверный логин.</b>';
} else {
echo '<b style="color:green">Логин свободен!</b>';
}
}
//todo Написать класс, который будет использоваться тут, в ekr.php, в _newanimal.php и в проверках при регистрации.
//todo При этом сюда стоит подтягивать наследование класса, в который просто добавляется проверка на exist() которая не нужна в других местах.
//todo function testBad($txt), function is_login($login), function en_ru($txt)