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