Forum Webscript.Ru

Программирование => PHP => Тема начата: kot от 29 Ноября 2001, 18:18:23

Название: Как пересести слово в нижний регистр?
Отправлено: kot от 29 Ноября 2001, 18:18:23
Перевести надо именно слово, написанное ПОЛНОСТЬЮ большими буквами. Задача следующая: Есть текст, в котором некоторые слова пишутся БОЛЬШИМИ буквами. Надо только эти слова перевести в нижний регистр. Причем не допускаются следующие замены:
Слово --> слово,
сЛово --> слово...

Заранее огромное спасибо.
Название: Как пересести слово в нижний регистр?
Отправлено: Макс от 29 Ноября 2001, 22:50:57
Вроде так работает:

$a="АААа БББ ббб AS";
function my_lowcase($source_text)
{
   $regExp=\'/(?<=\\s)([A-ZА-Я]+)(?=\\s|$)/es\';
   $res_text=preg_replace($regExp,"strtolower(\'\\\\1\')",$source_text);
   return $res_text;
}

echo strtolower($a)."\\n";
echo my_lowcase($a);;
?>
Название: Как пересести слово в нижний регистр?
Отправлено: kot от 30 Ноября 2001, 12:08:06
Не работает :-(
Вот что я вижу при выполнении этого кода:

1) АААа БББ ббб as
Ну, с этим понятно, потому что strtolower работает только с английскими буквами и не делает разницу полностью ли слово написано заглавными или нет...

2) АААа БББ ббб AS - т.е. my_lowcase вообще ничего не делает :-(

В чем тут проблема?
Заранее огромное спасибо.
Название: Как пересести слово в нижний регистр?
Отправлено: DaBugi от 30 Ноября 2001, 18:23:54
$second=strtr($from,"АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЬЪЭЮЯ","абвгдеёжзиклмнопрстуфхцчшщьъэюя");

Соответственно у тебя в from - исходная строка, в second - уже обработанная...

Только алфавит проверьте, я с русским в неладах :)
Название: Как пересести слово в нижний регистр?
Отправлено: kot от 01 Декабря 2001, 15:10:37
Это тоже не то, что надо, потому как переведутся в нижний регистр ВСЕ заглавные буквы (я уже так пробовал), а мне надо (напоминаю в очередной раз:) чтобы пребразовывались слова которые ПОЛНОСТЬЮ написаны большими буквами...

Какие есть еще варианты?
Заранее огромное спасибо.
Название: Как пересести слово в нижний регистр?
Отправлено: Макс от 01 Декабря 2001, 22:01:51

function my_lowcase($source_text)
{
   $regExp=\'/(?<=\\s|^)([A-ZА-Я]+)(?=\\s|$)/es\';
   $res_text=preg_replace($regExp,"strtolower(strtr(\'\\\\1\',\'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ\',\'абвгдеёжзийклмнопрстуфхцчшщьыъэюя\'))",$source_text);
   return $res_text;
}
Название: Как пересести слово в нижний регистр?
Отправлено: kot от 02 Декабря 2001, 13:51:27
Макс, ну не работает у меня этот код :-(
Не знаю в чем беда. Принцип понял, но текст вообще не меняется... Ты проверял?

Заранее огромное спасибо.
Название: Как пересести слово в нижний регистр?
Отправлено: Макс от 02 Декабря 2001, 14:52:17
Цитировать
Ты проверял?
Проверял, но я под WIN98 сижу - там работает.

Дело наверное в том что в strtr(\'\\\\1\' ...) идет 2 слеша перед единицей - это форум их урезал до одного. Попробуй второй слеш добавить.