我正在寻找一种最短、最简单、最优雅的方法来计算给定字符串中大写字母的数量。
我正在寻找一种最短、最简单、最优雅的方法来计算给定字符串中大写字母的数量。
function count_capitals($s) {
return mb_strlen(preg_replace('![^A-Z]+!', '', $s));
}
/[^\p{Lu}]/u
。 - Almino Melo/[^\p{Lu}]/u
时。@emix,@Almino Melo - Beta Projects$str = "AbCdE";
preg_match_all("/[A-Z]/", $str); // 3
George Garchagudashvili的解决方案非常出色,但如果小写字母含有变音符或重音符号,则无法正常工作。
因此,我对他的版本进行了小修补,以便也能处理小写带重音的字母:
public static function countCapitalLetters($string){
$lowerCase = mb_strtolower($string);
return strlen($lowerCase) - similar_text($string, $lowerCase);
}
$mixed_case = "HelLo wOrlD";
$lower_case = strtolower($mixed_case);
$similar = similar_text($mixed_case, $lower_case);
echo strlen($mixed_case) - $similar; // 4
这可能不是最短的方法,但可以说是最简单的方法,因为无需执行正则表达式。通常我会说这应该更快,因为逻辑和检查很简单,但是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";