pablo
pablo

Reputation: 801

simplest, shortest way to count capital letters in a string with php?

I am looking for the shortest, simplest and most elegant way to count the number of capital letters in a given string.

Upvotes: 23

Views: 15439

Answers (5)

cletus
cletus

Reputation: 625237

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

Upvotes: 51

user4664714
user4664714

Reputation:

George Garchagudashvili Solution is amazing, but it fails if the lower case letters contain diacritics or accents.

So I did a small fix to improve his version, that works also with lower case accentuated letters:

public static function countCapitalLetters($string){

    $lowerCase = mb_strtolower($string);

    return strlen($lowerCase) - similar_text($string, $lowerCase);
}

You can find this method and lots of other string common operations at the turbocommons library:

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

EDIT 2019

The method to count capital letters in turbocommons has evolved to a method that can count upper case and lower case characters on any string. You can check it here:

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

Read more info here:

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

And it can also be tested online here:

https://turbocommons.org/en/app/stringutils/count-capital-letters

Upvotes: 5

Stream Huang
Stream Huang

Reputation: 336

$str = "AbCdE";

preg_match_all("/[A-Z]/", $str); // 3

Upvotes: 10

George G
George G

Reputation: 7695

I'd give another solution, maybe not elegant, but helpful:

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

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

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

Upvotes: 4

mimetnet
mimetnet

Reputation: 657

It's not the shortest, but it is arguably the simplest as a regex doesn't have to be executed. Normally I'd say this should be faster as the logic and checks are simple, but PHP always surprises me with how fast and slow some things are when compared to others.

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

Upvotes: 0

Related Questions