Fonction pour compter le nombre de chiffres dans la chaîne

Je cherchais une fonction php rapide qui, étant donné une chaîne, compterait le nombre de caractères numériques (c'est-à-dire des chiffres) dans cette chaîne. Je n'ai pas pu en trouver un, y a-t-il une fonction pour le faire?

22
demandé sur D. Strout 2012-06-14 01:44:09

4 réponses

Cela peut facilement être accompli avec une expression régulière.

function countDigits( $str )
{
    return preg_match_all( "/[0-9]/", $str );
}

La fonction retournera le nombre de fois où le motif a été trouvé, ce qui dans ce cas est n'importe quel chiffre.

46
répondu Overv 2012-06-13 21:46:20

D'abord divisez votre chaîne , ensuite filtrezle résultat en n'incluez que des caractères numériqueset ensuite simplement comptez les éléments résultants.

<?php 

$text="12aap33";
print count(array_filter(str_split($text),'is_numeric'));

Edit: ajout d'une référence par curiosité: (boucle de 1000000 de chaîne et de routines ci-dessus)

Preg_based.php est la solution preg_match_all d'overv

harald@Midians_Gate:~$ time php filter_based.php 

real    0m20.147s
user    0m15.545s
sys     0m3.956s

harald@Midians_Gate:~$ time php preg_based.php 

real    0m9.832s
user    0m8.313s
sys     0m1.224s

L'expression régulière est clairement supérieure. :)

7
répondu Harald Brinkhof 2012-06-13 22:06:01

Pour PHP

function countDigits( $str )
{
    return count(preg_grep('~^[0-9]$~', str_split($str)));
}
5
répondu Alix Axel 2012-06-13 22:12:52

Cette fonction passe par la chaîne donnée et vérifie chaque caractère pour voir s'il est numérique. Si elle l'est, il incrémente le nombre de chiffres, puis le renvoie à la fin.

function countDigits($str) {
    $noDigits=0;
    for ($i=0;$i<strlen($str);$i++) {
        if (is_numeric($str{$i})) $noDigits++;
    }
    return $noDigits;
}
0
répondu D. Strout 2012-06-13 21:44:10