| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > изменение регистра русских букв |
| Автор: Гость_Alex 28.1.2004, 10:23 |
| наконец-то нашел хороший форум по cgi и решил запостить свой первый вопрос изучать перл начал только недавно, так что вопросов много. соббсно вопрос: в форме подписки человек вводит свое имя русскими буквами, подскажите плиз строчку, заменяющий все буквы на строчные, а начальную букву имени на заглавную. заранее спасибо. |
| Автор: Secandr 28.1.2004, 10:34 |
| Попробуй lc Ещё может понадобиться указать локаль: use locale |
| Автор: <YURIC> 28.1.2004, 13:28 | ||||
Результат:
|
| Автор: korob2001 29.1.2004, 14:29 | ||||||
| Можно так же воспользоваться эскейп последовательностями. Например:
\L - переводит все последующие символы в нижний регистр \u - переводит следующий один сивол в верхний регистр Здесь у вас может возникнуть резонный и вполне логичный вопрос: Что нужно сделать, чтобы ограничить последовательность \L в определённом месте строки, то есть чтобы она не распространялась на всю строку/список? Например есть две переменные $name и $pass как показано ниже:
Что же произошло? В приведённом выше коде последовательности \u и \L сделали своё дело. Сначала последовательность \L перевела все символы в нижний регистр вместе с переменной $pass, затем подключилась последовательность \u и мы получили следующую строку: Денис izo2ter1 Угу, но ведь пароль должен оставаться паролем. Тут приходит на помощь ещё одна управляющая последовательность \E. Приведу пример не верного кода, указанного выше с устранённой проблемой:
\E - служит ограничителем для таких последовательностей как \L, \U, \Q И так, что мы имеем? Последовательности \u\L как и в примере выше делают своё дело, но так как последовательность \L распространяется на все последующие за ней символы, нам нужно её остановить там, где нужно (в нашем случае, сразу после переменной $name). \L начинает переводить символы один за другим в нижний регистр, сремительно продвигаясь к концу строки ;), но, когда она встречает \E, нашей проказнице \L ничего не остаётся, кроме как обломаться, что она и делает. Все остальные символы строки остаются в том регистре, в каком были раньше. Внимание!!! Если управляющие последовательности расположены друг за другом, в нашем случае это \u\L, то сначала включается последняя, то есть \L, а только потом включается \u. И так далее. Гы-гы, во я выдал! ;) |
| Автор: Гость_ALex 2.2.2004, 11:23 |
| даа, целый трактат ! спасибо всем за быстрые ответы. сейчас буду экспериментировать |