самый простой, самый короткий способ подсчитать заглавные буквы в строке с php? - PullRequest
13 голосов
/ 13 октября 2009

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

Ответы [ 5 ]

41 голосов
/ 13 октября 2009
function count_capitals($s) {
  return strlen(preg_replace('![^A-Z]+!', '', $s));
}
3 голосов
/ 08 марта 2017

Георгий Гарчагудашвили Решение изумительно, но оно терпит неудачу, если строчные буквы содержат диакритические знаки или ударения.

Итак, я сделал небольшое исправление, чтобы улучшить его версию, которая работает также с буквами в нижнем регистре:

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

2 голосов
/ 11 сентября 2014

Я бы дал другое решение, может быть, не элегантное, но полезное:

$mixed_case = "HelLo wOrlD";
$lower_case = strtolower($mixed_case);

$similar = similar_text($mixed_case, $lower_case);

echo strlen($mixed_case) - $similar; // 4
0 голосов
/ 16 октября 2018
$str = "AbCdE";

preg_match_all("/[A-Z]/", $str); // 3
0 голосов
/ 13 октября 2009

Это не самое короткое, но, возможно, самое простое, поскольку регулярное выражение не нужно выполнять. Обычно я бы сказал, что это должно быть быстрее, поскольку логика и проверки просты, но 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";
...