Подтвердить что ты не робот

Простейший, самый короткий способ подсчета заглавных букв в строке с php?

Я ищу самый короткий, самый простой и элегантный способ подсчета количества заглавных букв в заданной строке.

4b9b3361

Ответ 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:

https://github.com/edertone/TurboCommons/blob/70a9de1737d8c10e0f6db04f5eab0f9c4cbd454f/TurboCommons-Php/src/main/php/utils/StringUtils.php#L373

ОБНОВЛЕНИЕ 2019

Метод подсчета заглавных букв в turbocommons превратился в метод, который может считать заглавные и строчные буквы в любой строке. Вы можете проверить это здесь:

https://github.com/edertone/TurboCommons/blob/1e230446593b13a272b1d6a2903741598bb11bf2/TurboCommons-Php/src/main/php/utils/StringUtils.php#L391

Подробнее читайте здесь:

https://turbocommons.org/en/blog/2019-10-15/count-capital-letters-in-string-javascript-typescript-php

И это может также быть проверено онлайн здесь:

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";