2009-10-13 56 views
12

我正在尋找最短,最簡單,最優雅的方法來計算給定字符串中大寫字母的數量。最簡單,最簡單的方法來計算字符串中的大寫字母與PHP?

+6

如果你想欺騙:strlen的(strtoupper($ STR));) – 2009-10-13 02:47:37

+0

最簡單並且最優雅!= code高爾夫 – 2009-10-13 02:52:37

+4

str_replace(範圍('A','Z'),'',$ str,$ num_caps); echo $ num_caps; – GZipp 2009-10-13 05:00:19

回答

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

cletus不能寫代碼。它從哪裏來的? – 2014-12-22 14:29:34

+0

不適用於各種語言的特殊utf-8字符。 – 2017-11-04 20:30:48

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

就像在C! – alex 2010-11-02 02:04:38

+3

函數* count \ _capitals *到目前爲止速度更快。使用非常短的字符串* count \ _capitals *只是更快一些,但是第一段「Lorem ipsum ...」運行3000次迭代需要0.03秒,而通過函數* capital \ _letters運行相同字符串需要1.8秒。 3000次。 – 2010-11-02 02:03:35

2

我給另一種解決方案,也許不是優雅,但有所幫助:

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

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

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

似乎這種解決方案即使對大寫字母和變音符號也能工作。 +1 – LittleTiger 2016-10-24 04:33:13

2

喬治Garchagudashvili解決方案是驚人的,但如果小寫字母包含變音符號或重音失敗。

所以我做了一個小的修復,以提高自己的版本,與小寫字母加劇也適用:

public static function countCapitalLetters($string){ 

    $lowerCase = mb_strtolower($string); 

    return strlen($lowerCase) - similar_text($string, $lowerCase); 
} 
相關問題