Резерв имен

DV

Guest
Резерв имен

Извините, может, за тупой вопрос, но все-таки возник:
как сделать проверку фамилии и имени на резервность – чтобы в гостевой имена администраторов не использовали обычные грешные. При обычном сравнении получается что если изменить регистр букв, он проходит проверку…
 

Igorek2003

Guest
При сравнении используй strtolower или strtoupper для обоих имен
 

DV

Guest
Igorek2003
Если я не ошибаюсь, у этих функций проблемы с русским...и они не выполняют возложенных на них операций по переводу в нижний регистр.
 

Igorek2003

Guest
DV
Так ты проверь. Покрайней мере у меня все прекрасно работает
 

DV

Guest
lucas
А строка "Иванов Иван" и "Иван Иванов" сможет сравнить какая-нибудь функция и считать их одинаковыми?
 

ys

отодвинутый новичок
DV

А может пойти по пути наименьшего сопротивления и разрешить писать только русскими или английскими буквами?
 

DV

Guest
ys
Я и не говорил про другое. Дело в регистре РУССКИХ букв.
 

Igorek2003

Guest
А строка "Иван иванов" и "Иван Иванов" сможет сравнить какая-нибудь функция и считать их одинаковыми?
А как насчет такой функции:
PHP:
<?php
$name1 = "иванов иван";
$name2 = "Иван иВанов";

function check($name1, $name2)
{
	$arr1 = explode(" ",$name1);
	$arr2 = explode(" ",$name2);

	if (count($arr1)!=count($arr2)) return false;
	
	foreach ($arr1 as $s1)
		{
			$f = false;
			foreach ($arr2 as $s2)
				{
					if (strtolower($s1)==strtolower($s2)) {$f=true;continue;}
				}
			if ($f==false) return false;
		}
	return true;
}
if (check($name1, $name2)) echo "Имена совпали";else echo "Имена различны";
?>
 

Фанат

oncle terrible
Команда форума
откуда в гостевой администратор, да еще во множественном числе?
 

IL78

Guest
вариант ф-ции для сравнения тех же строк, но без вложенного цикла:
PHP:
function check1($name1, $name2)
{
    $ar1 = explode(" ",strtolower($name1));
    $ar2 = explode(" ",strtolower($name2));
    sort($ar1);
    sort($ar2);
    return($ar1 == $ar2);
}
 

korvin0

моська
[ deleted ]

-~{}~ 24.07.04 00:04:

короч, чтоб правильно сравнивать строки из кириллицы, надо поставить правильно локаль по-любому. этого не избежать.
 

lucas

Guest
А строка "Иванов Иван" и "Иван Иванов" сможет сравнить какая-нибудь функция и считать их одинаковыми?
Используем функцию IL78, вместо проверки на равенство массивов вставив проверку соответсвующих пар значений в массивах с помощью вышеприведенных функций (similar_text, levenstein).
Значения "похожести" суммируем и возвращаем результат сравнения в соотв. с величиной "похожести".

А про локаль я написал ой как давно...
 

lucas

Guest
korvin0
Тем, что проверяет на точное совпадение строк.
Получается, что "Иванов Иван" != "Иванов Вано" != "Иван Иванова".
 

IL78

Guest
lucas, моя ф-ция писалась именно для проверки полного совпадения всех слов без учета регистра. Для вычисления величины "похожести" неодинаковых слов, имхо, все же необходим цикл.
 

lucas

Guest
моя ф-ция писалась именно для проверки полного совпадения всех слов без учета регистра
Как ни странно, я это заметил. :)

Я всего лишь отвечал на отквоченный вопрос -- в реализации для "общего случая", когда имена могут незначительно отличаться.
 

DV

Guest
Фанат откуда в гостевой администратор, да еще во множественном числе?
Есть сайт радиостанции, в гостевой книге слушатели могут задавать вопросы ведущим и др. работникам станции, имена которых извесны, так надо сделать так, чтобы пользователи не смогли воспользоваться зарезервированными именами - не отвечали от лиц станции сами...
Под администраторами - понимать имена зарезервированных имен, т.к. они будут отвечать отдельно.
Слушатели могут оставлять свои сообщения без всяких регистраций и авторизаций....это принципиально.

-~{}~ 24.07.04 17:06:

Вот нашел такую штучку, может ей лучше:
PHP:
<?php
function stringUpDown($text, $up = true){

   # Convert values from Lower to Upper
   $arrayLower=array('з'
   ,'в','г','а','б','д'
   ,'й','и','к','л'
   ,'н','м','о','п'
   ,'у','т','ф','х','ц'
   ,'ъ','щ','ы','ь');
   
   $arrayUpper=array('З'
   ,'В','Г','Б','А','Д'
   ,'Й','И','К','Л'
   ,'Н','М','О','П'
   ,'У','Т','Х','Ф','Ц'
   ,'Ъ','Щ','Ы','Ь');

if($text == ''){
   return $text;
}

if($up != true) {
   $text=strtolower($text);
   $text=str_replace($arrayUpper, $arrayLower, $text);
}else{
   $text=strtoupper($text);
   $text=str_replace($arrayLower, $arrayUpper, $text);
}
   return($text);
} #end of function 
?>
-~{}~ 24.07.04 17:11:

Все говорят локаль, локаль, а где прочитать что это такое и с чем это кушают? ;)
 

Фанат

oncle terrible
Команда форума
обычно в гостевых книгах ответы администраторов выделяются совсем другим цветом и вообще отдельно от простых сообщений.
и такие ухищрения вообще не нужны

-~{}~ 24.07.04 17:25:

а вообще, я с нетерпением жду окончания этого представления, когда выяснится что все эти срадания пропадают втуне, когда вместо русской а пишется латинская а :)
 
Сверху