Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

PHP: Маленькие и заглавные буквы

25K
22 декабря 2009 года
mdrm
37 / / 26.05.2008
Всем привет.

Помогите пожалуйста решить задачку:
Как узнать к какому регистру принадлежит каждый символ в строке?
Что-то никак не могу сообразить.

Код:
<?php
    $str = "Строка В Кодировке UTF-8!";
   
    for ($i = 0; $i < mb_strlen($str, "UTF-8"); $i++) {
         $char = mb_substr($str, $i, 1, "UTF-8");

         if (<условие>) {
            echo $char." - Заглавная буква";  
         }
         
         if (<условие>) {
            echo $char." - Обычная(маленькая) буква";  
         }
    }  
   
?>
13
22 декабря 2009 года
RussianSpy
3.0K / / 04.07.2006
Ну насколько я помню такой функции нет
Первое что приходит в голову - создать массивы-алфавиты. В одном будут заглавные, в другом строчные и искать символ поочередно. Если нет ни в одном - значит либо буква другого алфавита, либо другой знак.

Хотя самый верный вариант это сравнивать по коду символа.
25K
22 декабря 2009 года
mdrm
37 / / 26.05.2008
Спасибо за совет, наверное придется делать через массив.
Попробовал по коду через функцию ord(), криво работает с русскими буквами видимо из-за UTF-8.
274
22 декабря 2009 года
Lone Wolf
1.3K / / 26.11.2006
ну код символа еще получить надо =) утф-всетаки.. проще регекспы юзать, хотя оптимально ли это?

[highlight=php]
<?php
$str = "Строка В Кодировке UTF-8!";

for ($i = 0; $i < mb_strlen($str, "UTF-8"); $i++) {
$char = mb_substr($str, $i, 1, "UTF-8");

if (preg_match("/[A-ZА-Я]/u",$char)!=0){
echo $char." - Заглавная буква\n";
}

elseif (preg_match("/[a-zа-я]/u",$char)!=0) {
echo $char." - Обычная(маленькая) буква\n";
}
else echo $char." -Не буква\n";
}

?>
[/highlight]
25K
22 декабря 2009 года
mdrm
37 / / 26.05.2008
Да, с регулярками код компактней будет.
Спасибо за лучшее решение!!!
285
22 декабря 2009 года
Romik
479 / / 24.11.2002
Этот компактный код будет создавать большие нагрузки на немалых массивах данных. Полагаю об этом говорил Lone Wolf. Так что подумайте, стоит ли применять регулярные выражение, если данным функционалом прийдётся обрабатывать большие объёмы данных.
13
22 декабря 2009 года
RussianSpy
3.0K / / 04.07.2006
Может проще тогда строковыми функциями обойтись? Например таким быдлокодерским вариантом (никогда бы не стал подобное использовать в своих проектах).

 
Код:
if(mb_strtolower($str)==$str) echo 'Строчная буква';
else if(mb_strtoupper($str)==$str) echo 'Заглавная буква';
else echo 'Не буква';


Короче и имхо должно быстрее работать чем вариант с регулярками
285
22 декабря 2009 года
Romik
479 / / 24.11.2002
ну и напрасно не стал бы.
страх быдлокодерства порой ведёт к вариантам с регулярками.
13
22 декабря 2009 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Romik
ну и напрасно не стал бы.
страх быдлокодерства порой ведёт к вариантам с регулярками.



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

1
22 декабря 2009 года
kot_
7.3K / / 20.01.2000
Цитата: RussianSpy
Страх быдлокодерства ведет прежде всего к повышению качества кода. Вариант с регулярками такой же быдлокод (даже еще хуже, учитвая, что работать он будет медленнее)


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

16K
22 декабря 2009 года
k0t
97 / / 23.04.2007
Цитата: RussianSpy
Может проще тогда строковыми функциями обойтись? Например таким быдлокодерским вариантом (никогда бы не стал подобное использовать в своих проектах).

 
Код:
if(mb_strtolower($str)==$str) echo 'Строчная буква';
else if(mb_strtoupper($str)==$str) echo 'Заглавная буква';
else echo 'Не буква';


Короче и имхо должно быстрее работать чем вариант с регулярками



А можно посмотреть на решение, которое бы вы использовали в своих проектах.

13
22 декабря 2009 года
RussianSpy
3.0K / / 04.07.2006
По началу такое бы и использовал, пока не нашел бы верное решение.
274
22 декабря 2009 года
Lone Wolf
1.3K / / 26.11.2006
пришел домой. пароскинул мозгами..
[highlight=php]
<?php
$str = "Строка В Кодировке UTF-8!";
for ($i = 0; $i < mb_strlen($str, "UTF-8"); $i++)
{
$char = mb_substr($str, $i, 1, "UTF-8");
if (($char>='А' && $char<='Я') || ($char>='A' && $char <='Z'))
{
echo $char." - Заглавная буква\n";
}
elseif (($char>='а' && $char<='я') || ($char>='a' && $char <='z'))
{
echo $char." - Обычная(маленькая) буква\n";
}
else echo $char." -Не буква\n";
}
?>
[/highlight]
563
24 декабря 2009 года
MrLinker
249 / / 17.09.2006
Суть может не в этом, но длину строки можно определить один раз перед циклом.
Пойду к Ваську бублики жрать...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог