使用php计算字符串中大写字母的最简单,最短的方法?

时间:2009-10-13 02:44:23

标签: php count letters

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

5 个答案:

答案 0 :(得分:41)

function count_capitals($s) {
  return strlen(preg_replace('![^A-Z]+!', '', $s));
}

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

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

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

echo strlen($mixed_case) - $similar; // 4

答案 3 :(得分: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";

答案 4 :(得分:0)

UPDATE