Я ищу самый короткий, самый простой и элегантный способ подсчета количества заглавных букв в заданной строке.
Простейший, самый короткий способ подсчета заглавных букв в строке с php?
Ответ 1
function count_capitals($s) {
return strlen(preg_replace('![^A-Z]+!', '', $s));
}
Ответ 2
Решение Джорджа Гарчагудашвили поразительно, но оно терпит неудачу, если строчные буквы содержат диакритические знаки или акценты.
Поэтому я сделал небольшое исправление, чтобы улучшить его версию, которая работает также с буквами в нижнем регистре:
public static function countCapitalLetters($string){
$lowerCase = mb_strtolower($string);
return strlen($lowerCase) - similar_text($string, $lowerCase);
}
Вы можете найти этот метод и множество других общих операций со строками в библиотеке turbocommons:
ОБНОВЛЕНИЕ 2019
Метод подсчета заглавных букв в turbocommons превратился в метод, который может считать заглавные и строчные буквы в любой строке. Вы можете проверить это здесь:
Подробнее читайте здесь:
И это может также быть проверено онлайн здесь:
https://turbocommons.org/en/app/stringutils/count-capital-letters
Ответ 3
Я бы дал другое решение, возможно, не изящное, но полезное:
$mixed_case = "HelLo wOrlD";
$lower_case = strtolower($mixed_case);
$similar = similar_text($mixed_case, $lower_case);
echo strlen($mixed_case) - $similar; // 4
Ответ 4
$str = "AbCdE";
preg_match_all("/[A-Z]/", $str); // 3
Ответ 5
Это не кратчайший, но, возможно, самый простой, поскольку регулярное выражение не должно выполняться. Обычно я бы сказал, что это должно быть быстрее, поскольку логика и проверки просты, но PHP всегда удивляет меня тем, как быстро и медленно некоторые вещи по сравнению с другими.
function capital_letters($s) {
$u = 0;
$d = 0;
$n = strlen($s);
for ($x=0; $x<$n; $x++) {
$d = ord($s[$x]);
if ($d > 64 && $d < 91) {
$u++;
}
}
return $u;
}
echo 'caps: ' . capital_letters('HelLo2') . "\n";