[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярки
Renden
С пятничкой,
отредатировал, а то не понятно что я хотел, есть: Алексей Пупкин, Наталья Сидорова нужно: Алексея Пупкина, Натальи Сидоровой. Вот код(нужно изменять хотябы по фамилиям, имена не обязательно но желательно):

$last = mb_substr($last,-4);
if (preg_match('\/(ов|ев|ын|ин)/i', $last)) echo .. ;
//Все ок, но когда по жен. фамилиям начинаю склонять, то там уже 3 буквы надо отсеять...

if (preg_match('\/(ова|a)/i', $last) echo .. ;
//... и приходится в substr ставить -6 (3 буквы последних), но тогда проверка срабатывает 2 раза так как допустим Иванова (тут и 'ова' и 'ов').

вопрос в том как правильно искать по последним буквам, чтоб небыло таких проблем?



Спустя 1 час, 8 минут (15.04.2011 - 14:28) Игорь_Vasinsky написал(а):
трудновато, нету смысла.

фамилия "Штиль" - не склоняется - как мужская так и женская, поэтому - советую бросить эту затею.

Либо словарь фамилий (а я сомневаюсь что он есть) - и ручками по каждой.

Спустя 1 час, 47 секунд (15.04.2011 - 15:29) Renden написал(а):
Игорь_Vasinsky
Да мне не совсем склонение надо, мне нужен падеж, я хз я русский уже не помню smile.gif
Типа есть Иванов Иван Иванович мне надо Иванова Ивана Ивановича, и для Ж. тоже, нетак сложно это.
Цитата
фамилия "Штиль" - не склоняется

Никто не мешает мне добавить else и там просто сделать вывод $last;

Спустя 9 дней, 19 часов, 53 минуты, 21 секунда (25.04.2011 - 11:23) Renden написал(а):
Апну темку, вопрос актуален, неужели никто не заморачивался по поводу переведения фамилий из одного падежа в другой?
Поискал готовые стрипты, чето нет ничего нормального..(

Спустя 3 часа, 25 минут, 58 секунд (25.04.2011 - 14:49) alex12060 написал(а):

// softtime.ru

function DativeCase($FirstName, $SecondName, $Patronymic)
{
$FirstName = trim($FirstName);
$SecondName = trim($SecondName);
$Patronymic = trim($Patronymic);

if (!empty($FirstName) && !empty($SecondName) && !empty($Patronymic))
{
# Получаем пол человека:
if (substr($Patronymic, -1) == 'ч')
{
# Склонение фамилии мужчины:
switch (substr($FirstName, -2))
{
case 'ха':
$FirstName = substr($FirstName, 0, -2).'ха';
break;

default:
switch (substr($FirstName, -1))
{
case 'е': case 'о': case 'и': case 'я': case 'а':
break;

case 'й':
$FirstName = substr($FirstName, 0, -2).'ого';
break;

case 'ь':
$FirstName = substr($FirstName, 0, -1).'а';
break;

default:
$FirstName = $FirstName.'а';
break;
}
break;
}

# Склонение мужского имени:
switch (substr($SecondName, -1))
{
case 'л':
$SecondName = substr($SecondName, 0, -2).'ла';
break;

case 'а': case 'я':
If (substr($SecondName, -2, 1) == 'и')
{
$SecondName = substr($SecondName, 0, -1).'а';
}
else
{
$SecondName = substr($SecondName, 0, -1).'и';
}
break;

case 'й': case 'ь':
$SecondName = substr($SecondName, 0, -1).'я';
break;

default:
$SecondName = $SecondName.'а';
break;
}

# Склонение отчества
$Patronymic = $Patronymic.'а';

}
else
{
# Склоенение женской фамилии
switch (substr($FirstName, -1))
{
case 'о': case 'и': case 'б': case 'в': case 'г':
case 'д': case 'ж': case 'з': case 'к': case 'л':
case 'м': case 'н': case 'п': case 'р': case 'с':
case 'т': case 'ф': case 'х': case 'ц': case 'ч':
case 'ш': case 'щ': case 'ь':
break;

case 'я':
$FirstName = substr($FirstName, 0, -2).'ой';

default:
$FirstName = substr($FirstName, 0, -1).'ой';
break;
}

# Склонение женского имени:
switch (substr($SecondName, -1))
{
case 'а': case 'я':
If (substr($SecondName, -2, 1) == 'и' or substr($SecondName, -2, 1) == 'г')
{
$SecondName = substr($SecondName, 0, -1).'и';
}
else
{
$SecondName = substr($SecondName, 0, -1).'ы';
}
break;
case 'ь':
$SecondName = substr($SecondName, 0, -1).'и';
break;
}

# Склонение женского отчества
$Patronymic = substr($Patronymic, 0, -1).'ы';

}

return"$FirstName $SecondName $Patronymic";
}
}

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.