I was looking for a quick PHP function that, given a string, would count the number of numerical characters (i.e. digits) in that string. I couldn't find one, is there a function to do this?
Asked
Active
Viewed 3.5k times
4 Answers
61
This can easily be accomplished with a regular expression.
function countDigits( $str )
{
return preg_match_all( "/[0-9]/", $str );
}
The function will return the amount of times the pattern was found, which in this case is any digit.

Overv
- 8,433
- 2
- 40
- 70
-
12mind you that the third parameter only is optional since 5.4, so to be sure best add a value to receive the matches. see http://www.php.net/manual/en/function.preg-match-all.php – Harald Brinkhof Jun 13 '12 at 22:00
-
How can I do if I only want to count many times is repeated the number 4? – ras212 Feb 23 '17 at 17:08
-
3@ras212 Replace [0-9] with 4. – Overv Feb 23 '17 at 17:19
7
first split your string, next filter the result to only include numeric chars and then simply count the resulting elements.
<?php
$text="12aap33";
print count(array_filter(str_split($text),'is_numeric'));
edit: added a benchmark out of curiosity: (loop of 1000000 of above string and routines)
preg_based.php is overv's preg_match_all solution
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
the regular expression is clearly superior. :)

Harald Brinkhof
- 4,375
- 1
- 22
- 32
4
For PHP < 5.4:
function countDigits( $str )
{
return count(preg_grep('~^[0-9]$~', str_split($str)));
}

Alix Axel
- 151,645
- 95
- 393
- 500
0
This function goes through the given string and checks each character to see if it is numeric. If it is, it increments the number of digits, then returns it at the end.
function countDigits($str) {
$noDigits=0;
for ($i=0;$i<strlen($str);$i++) {
if (is_numeric($str{$i})) $noDigits++;
}
return $noDigits;
}

Ashley Strout
- 6,107
- 5
- 25
- 45