PHP: Маленькие и заглавные буквы
Помогите пожалуйста решить задачку:
Как узнать к какому регистру принадлежит каждый символ в строке?
Что-то никак не могу сообразить.
Код:
<?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." - Обычная(маленькая) буква";
}
}
?>
$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." - Обычная(маленькая) буква";
}
}
?>
Первое что приходит в голову - создать массивы-алфавиты. В одном будут заглавные, в другом строчные и искать символ поочередно. Если нет ни в одном - значит либо буква другого алфавита, либо другой знак.
Хотя самый верный вариант это сравнивать по коду символа.
Попробовал по коду через функцию ord(), криво работает с русскими буквами видимо из-за UTF-8.
[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]
Спасибо за лучшее решение!!!
Этот компактный код будет создавать большие нагрузки на немалых массивах данных. Полагаю об этом говорил Lone Wolf. Так что подумайте, стоит ли применять регулярные выражение, если данным функционалом прийдётся обрабатывать большие объёмы данных.
Код:
if(mb_strtolower($str)==$str) echo 'Строчная буква';
else if(mb_strtoupper($str)==$str) echo 'Заглавная буква';
else echo 'Не буква';
else if(mb_strtoupper($str)==$str) echo 'Заглавная буква';
else echo 'Не буква';
Короче и имхо должно быстрее работать чем вариант с регулярками
страх быдлокодерства порой ведёт к вариантам с регулярками.
Цитата: Romik
ну и напрасно не стал бы.
страх быдлокодерства порой ведёт к вариантам с регулярками.
страх быдлокодерства порой ведёт к вариантам с регулярками.
Страх быдлокодерства ведет прежде всего к повышению качества кода. Вариант с регулярками такой же быдлокод (даже еще хуже, учитвая, что работать он будет медленнее)
Цитата: RussianSpy
Страх быдлокодерства ведет прежде всего к повышению качества кода. Вариант с регулярками такой же быдлокод (даже еще хуже, учитвая, что работать он будет медленнее)
ну так собственно Romik об этом и говорит - что в попытках избежать быдлокодерства, выбирают еще худший вариант.
Цитата: RussianSpy
Может проще тогда строковыми функциями обойтись? Например таким быдлокодерским вариантом (никогда бы не стал подобное использовать в своих проектах).
Короче и имхо должно быстрее работать чем вариант с регулярками
Код:
if(mb_strtolower($str)==$str) echo 'Строчная буква';
else if(mb_strtoupper($str)==$str) echo 'Заглавная буква';
else echo 'Не буква';
else if(mb_strtoupper($str)==$str) echo 'Заглавная буква';
else echo 'Не буква';
Короче и имхо должно быстрее работать чем вариант с регулярками
А можно посмотреть на решение, которое бы вы использовали в своих проектах.
По началу такое бы и использовал, пока не нашел бы верное решение.
[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]
Пойду к Ваську бублики жрать...