28

我正在寻找一个快速的 PHP 函数,给定一个字符串,它会计算该字符串中的数字字符(即数字)的数量。没找到,有这个功能吗?

4

4 回答 4

58

这可以通过正则表达式轻松完成。

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

该函数将返回找到模式的次数,在本例中为任意数字。

于 2012-06-13T21:46:20.180 回答
8

首先拆分您的字符串,然后过滤结果以仅包含数字字符,然后简单地计算结果元素。

<?php 

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

编辑:出于好奇添加了一个基准:(上述字符串和例程的 1000000 循环)

preg_based.php 是 overv 的 preg_match_all 解决方案

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

正则表达式显然更胜一筹。:)

于 2012-06-13T21:54:12.810 回答
5

对于 PHP < 5.4:

function countDigits( $str )
{
    return count(preg_grep('~^[0-9]$~', str_split($str)));
}
于 2012-06-13T22:12:52.147 回答
0

此函数遍历给定的字符串并检查每个字符以查看它是否为数字。如果是,则增加位数,然后在最后返回。

function countDigits($str) {
    $noDigits=0;
    for ($i=0;$i<strlen($str);$i++) {
        if (is_numeric($str{$i})) $noDigits++;
    }
    return $noDigits;
}
于 2012-06-13T21:44:10.163 回答