Sto cercando il modo più breve, semplice ed elegante per contare il numero di lettere maiuscole in una determinata stringa.il modo più semplice e più breve per contare le lettere maiuscole in una stringa con php?
risposta
function count_capitals($s) {
return strlen(preg_replace('![^A-Z]+!', '', $s));
}
cletus non può scrivere codice. Da dove proviene? –
Non funziona con caratteri speciali di utf-8 dalla varietà di lingue. –
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";
Proprio come in C! – alex
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. –
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
Sembra che questa soluzione possa funzionare anche con lettere maiuscole con segni diacritici. +1 – LittleTiger
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);
}
Se vuoi per ingannare: strlen (strtoupper ($ str));) –
più semplice e più elegante! = code golf –
str_replace (range ('A', 'Z'), '', $ str, $ num_caps); echo $ num_caps; – GZipp