2009-10-13 14 views

risposta

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

cletus non può scrivere codice. Da dove proviene? –

+0

Non funziona con caratteri speciali di utf-8 dalla varietà di lingue. –

0

Non è il più breve, ma è probabilmente il più semplice in quanto una regex non deve essere eseguita. Normalmente direi che dovrebbe essere più veloce in quanto la logica e i controlli sono semplici, ma PHP mi sorprende sempre con la velocità e la lentezza di alcune cose rispetto agli altri.

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

Proprio come in C! – alex

+3

La funzione * count \ _capitals * è più veloce di gran lunga. Con stringhe molto corte * count \ _capitals * è solo un po 'più veloce ma con il primo paragrafo di "Lorem ipsum ..." è 0.03 secondi per eseguire 3000 iterazioni contro 1.8 secondi per eseguire la stessa stringa attraverso la funzione * capitale \ _letters * 3000 volte. –

2

darei un'altra soluzione, forse non elegante, ma utile:

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

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

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

Sembra che questa soluzione possa funzionare anche con lettere maiuscole con segni diacritici. +1 – LittleTiger

2

George Garchagudashvili Solution è incredibile, ma non riesce se le lettere minuscole contengono segni diacritici o accenti.

così ho fatto una piccola correzione per migliorare la sua versione, che funziona anche con minuscole accentuato lettere:

public static function countCapitalLetters($string){ 

    $lowerCase = mb_strtolower($string); 

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