Перейти к контенту

запрет использования похожих ников на форуме


winnie

Рекомендуемые сообщения

сражу скажу ©перта идея с чата пхп.спб.ру

проверял - вроде работает

вот сама модификация

 

в файле register.php

ищем

    /*-------------------------------------------------------------------------*/
// create_account
// ------------------
// Now this is a really good subroutine. It adds the member

и ПЕРЕД этим добавляем

function _pre_preg($nick) {

   unset($reg);
   $reg['q']='q';
   $reg['w']='w';
   $reg['e']='[eеё]';
   $reg['r']='[rг]';
   $reg['t']='[tт]';
   $reg['y']='[yу]';
   $reg['u']='[uи]';
   $reg['i']='[i1l!]';
   $reg['o']='[oо0]';
   $reg['p']='[pр]';
   $reg['a']='[aа]';
   $reg['s']='[s5]';
   $reg['d']='d';
   $reg['f']='f';
   $reg['g']='[gд]';
   $reg['h']='[hн]';
   $reg['j']='j';
   $reg['k']='[kк]';
   $reg['l']='[l1i!]';
   $reg['z']='z';
   $reg['x']='[xх%]';
   $reg['c']='[cс]';
   $reg['v']='[vuи]';
   $reg['b']='[bвь]';
   $reg['n']='[nпл]';
   $reg['m']='[mм]';
   $reg['й']='[йиu]';
   $reg['ц']='ц';
   $reg['у']='[уy]';
   $reg['к']='[кk]';
   $reg['е']='[еeё]';
   $reg['н']='[нh]';
   $reg['г']='[гr]';
   $reg['ш']='[шwщ]';
   $reg['щ']='[щwш]';
   $reg['з']='[з3э]';
   $reg['х']='[хx%]';
   $reg['ъ']='[ъь]';
   $reg['ф']='ф';
   $reg['ы']='(ы|ь[i1l!]?)';
   $reg['в']='[вb]';
   $reg['а']='[аa]';
   $reg['п']='[пn]';
   $reg['р']='[рp]';
   $reg['о']='[оo0]';
   $reg['л']='[лn]';
   $reg['д']='д';
   $reg['ж']='ж';
   $reg['э']='[э3з]';
   $reg['я']='я';
   $reg['ч']='[ч4]';
   $reg['с']='[сc]';
   $reg['м']='[мm]';
   $reg['и']='[иuй]';
   $reg['т']='[тt]';
   $reg['ь']='[ьb]';
   $reg['б']='[б6]';
   $reg['ю']='(ю|[!1il][oо0])';
   $reg['ё']='[ёеe]';
   $reg['1']='[1il!]';
   $reg['2']='2';
   $reg['3']='[3зэ]';
   $reg['4']='[4ч]';
   $reg['5']='[5s]';
   $reg['6']='[6б]';
   $reg['7']='7';
   $reg['8']='8';
   $reg['9']='9';
   $reg['0']='[0оo]';
   $reg['_']='_';
   $reg['~']='[~^]';
   $reg['!']='[!1li]';
   $reg['@']='@';
   $reg['#']='#';
   $reg['$']='[$]';
   $reg['%']='[%x]';
   $reg['^']='[^~]';
   $reg['*']='[*]';
   $reg['(']='[(]';
   $reg[')']='[)]';
   $reg['=']='=';
   $reg['+']='[+]';
   $reg['.']='[.]';
   $reg['-']='-';
   
   $n=strtolower($nick);
   $r="";
   for ($i=0; $i<strlen($nick); $i++) {
      $r.=$reg[$n[$i]];
   }
   return "$r";
   }

 

внутри функции находим запросы

$DB->cache_add_query( 'login_getmember', array( 'username' => strtolower($in_username) ) );
$DB->cache_exec_query();

меняем на

$DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($in_username)."'" ) );
$DB->simple_exec();

 

и чуть ниже

$DB->cache_add_query( 'login_getmember', array( 'username' => strtolower($unicode_name) ) );
$DB->cache_exec_query();

(этот отличается от предыдущего:D)

меняем на

$DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($unicode_name)."'" ) );
$DB->simple_exec();

Ссылка на комментарий
Поделиться на других сайтах

:D спасибо за заботу
Ссылка на комментарий
Поделиться на других сайтах

Вот так: "$n[$i]" никогда не пиши. Это вырезка не символа, а байта. На UTF-8 и т.п. в частности и с mb_string вообще работать корректно не будет. Я понимаю ещё Мэтту на это наплевать, но у тебя-то не английский родной :D

 

"substr($n, $i, 1)"

 

А так - хорошая идея ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 1 год спустя...
  • 6 месяцев спустя...
Люди, а как это применить в версии 2.1.3? Там не совсем такой код как в 2.0.х

Практически аналогично!

Идёшь в файлик sources\action_public\register.php

ищем

 

	/*-------------------------------------------------------------------------*/
// create_account
// ------------------
// Now this is a really good subroutine. It adds the member

и ПЕРЕД этим добавляем

 

function _pre_preg($nick) {

  unset($reg);
  $reg['q']='q';
  $reg['w']='w';
  $reg['e']='[eеё]';
  $reg['r']='[rг]';
  $reg['t']='[tт]';
  $reg['y']='[yу]';
  $reg['u']='[uи]';
  $reg['i']='[i1l!]';
  $reg['o']='[oо0]';
  $reg['p']='[pр]';
  $reg['a']='[aа]';
  $reg['s']='[s5]';
  $reg['d']='d';
  $reg['f']='f';
  $reg['g']='[gд]';
  $reg['h']='[hн]';
  $reg['j']='j';
  $reg['k']='[kк]';
  $reg['l']='[l1i!]';
  $reg['z']='z';
  $reg['x']='[xх%]';
  $reg['c']='[cс]';
  $reg['v']='[vuи]';
  $reg['b']='[bвь]';
  $reg['n']='[nпл]';
  $reg['m']='[mм]';
  $reg['й']='[йиu]';
  $reg['ц']='ц';
  $reg['у']='[уy]';
  $reg['к']='[кk]';
  $reg['е']='[еeё]';
  $reg['н']='[нh]';
  $reg['г']='[гr]';
  $reg['ш']='[шwщ]';
  $reg['щ']='[щwш]';
  $reg['з']='[з3э]';
  $reg['х']='[хx%]';
  $reg['ъ']='[ъь]';
  $reg['ф']='ф';
  $reg['ы']='(ы|ь[i1l!]?)';
  $reg['в']='[вb]';
  $reg['а']='[аa]';
  $reg['п']='[пn]';
  $reg['р']='[рp]';
  $reg['о']='[оo0]';
  $reg['л']='[лn]';
  $reg['д']='д';
  $reg['ж']='ж';
  $reg['э']='[э3з]';
  $reg['я']='я';
  $reg['ч']='[ч4]';
  $reg['с']='[сc]';
  $reg['м']='[мm]';
  $reg['и']='[иuй]';
  $reg['т']='[тt]';
  $reg['ь']='[ьb]';
  $reg['б']='[б6]';
  $reg['ю']='(ю|[!1il][oо0])';
  $reg['ё']='[ёеe]';
  $reg['1']='[1il!]';
  $reg['2']='2';
  $reg['3']='[3зэ]';
  $reg['4']='[4ч]';
  $reg['5']='[5s]';
  $reg['6']='[6б]';
  $reg['7']='7';
  $reg['8']='8';
  $reg['9']='9';
  $reg['0']='[0оo]';
  $reg['_']='_';
  $reg['~']='[~^]';
  $reg['!']='[!1li]';
  $reg['@']='@';
  $reg['#']='#';
  $reg['$']='[$]';
  $reg['%']='[%x]';
  $reg['^']='[^~]';
  $reg['*']='[*]';
  $reg['(']='[(]';
  $reg[')']='[)]';
  $reg['=']='=';
  $reg['+']='[+]';
  $reg['.']='[.]';
  $reg['-']='-';

  $n=strtolower($nick);
  $r="";
  for ($i=0; $i<strlen($nick); $i++) {
  $r.=$reg[substr($n, $i, 1)];
  }
  return "$r";
  }

внутри функции находим запросы

 

$this->ipsclass->DB->cache_add_query( 'login_getmember', array( 'username' => strtolower($in_username) ) );
	$this->ipsclass->DB->cache_exec_query();

меняем на

 

		$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($in_username)."'" ) );
	$this->ipsclass->DB->simple_exec();

и чуть ниже

 

			$this->ipsclass->DB->cache_add_query( 'login_getmember', array( 'username' => $this->ipsclass->DB->add_slashes(strtolower($unicode_name) ) ));
		$this->ipsclass->DB->cache_exec_query();

(этот отличается от предыдущегоsmile.gif)

меняем на

 

$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where'=>"lower(name) REGEXP '".$this->_pre_preg($unicode_name)."'" ) );
		$this->ipsclass->DB->simple_exec();

Ссылка на комментарий
Поделиться на других сайтах

  • 5 месяцев спустя...

А нет ли мыслей насчёт 1.3.1?

 

На сколько я понял отталкиваться нужно от

		$DB->query("SELECT id FROM ibf_members WHERE LOWER(name)='".strtolower($in_username)."'");
	$name_check = $DB->fetch_row();

Ссылка на комментарий
Поделиться на других сайтах

Нет. Регистрация пропустит "Barakud и Barakkud". Он не пропустит, если вместо "a" (англ.), будет стоять "а" (русс.). А верхний вариант - пропустит, так в первом нике одна К, а в другом их две :D
Ссылка на комментарий
Поделиться на других сайтах

  • 4 месяца спустя...
Регексп долго же будет выполняться в немаленькой таблице пользователей, по другому тут надо бы подойти :D...
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.