21

我正在寻找最短、最简单和最优雅的方法来计算给定字符串中大写字母的数量。

4

5 回答 5

49
function count_capitals($s) {
  return mb_strlen(preg_replace('![^A-Z]+!', '', $s));
}
于 2009-10-13T02:48:34.487 回答
8
$str = "AbCdE";

preg_match_all("/[A-Z]/", $str); // 3
于 2018-10-16T06:04:35.627 回答
6

George Garchagudashvili 解决方案很棒,但如果小写字母包含变音符号或重音符号,它就会失败。

所以我做了一个小修复来改进他的版本,它也适用于小写重音字母:

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

于 2017-03-08T20:47:44.690 回答
3

我会给出另一种解决方案,也许不优雅,但很有帮助:

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

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

echo strlen($mixed_case) - $similar; // 4
于 2014-09-10T20:10:32.270 回答
0

它不是最短的,但可以说是最简单的,因为不必执行正则表达式。通常我会说这应该更快,因为逻辑和检查很简单,但 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";
于 2009-10-13T03:17:51.133 回答