PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ctype_graph> <ctype_cntrl
Last updated: Fri, 02 Jan 2009

view this page in

ctype_digit

(PHP 4 >= 4.0.4, PHP 5)

ctype_digit数字かどうかを調べる

説明

bool ctype_digit ( string $text )

与えられた文字列 text のすべての文字が 数字であるかどうかを調べます。

パラメータ

text

調べる文字列。

返り値

text のすべての文字が数字だった場合に TRUE 、そうでない場合に FALSE を返します。

例1 ctype_digit() の例

<?php
$strings 
= array('1820.20''10002''wsl!12');
foreach (
$strings as $testcase) {
    if (
ctype_digit($testcase)) {
        echo 
"The string $testcase consists of all digits.\n";
    } else {
        echo 
"The string $testcase does not consist of all digits.\n";
    }
}
?>

上の例の出力は以下となります。

The string 1820.20 does not consist of all digits.
The string 10002 consists of all digits.
The string wsl!12 does not consist of all digits.



ctype_graph> <ctype_cntrl
Last updated: Fri, 02 Jan 2009
 
add a note add a note User Contributed Notes
ctype_digit
Anonymous
20-Nov-2008 05:56
Indeed, ctype_digit only functions correctly on strings. Cast your vars to string before you test them. Also, be wary and only use ctype_digit if you're sure your var contains either a string or int, as boolean true for ex will convert to int 1.

To be truly safe, you need to check the type of the var first. Here's a wrapper function that improves upon ctype_digit's broken implementation:

<?php

// replacement for ctype_digit, to properly
// handle (via return value false) nulls,
// booleans, objects, resources, etc.
function ctype_digit2 ($str) {
    return (
is_string($str) || is_int($str) || is_float($str)) &&
       
ctype_digit((string)$str);
}

?>

If, like me, you're not willing to take a chance on ctype_digit having other problems, use this version:

<?php

// replacement for ctype_digit, to properly
// handle (via return value false) nulls,
// booleans, objects, resources, etc.
function ctype_digit2 ($str) {
    return (
is_string($str) || is_int($str) || is_float($str)) &&
       
preg_match('/^\d+\z/', $str);
}

?>
per dot zut at gmail dot com
12-Sep-2008 06:09
reuvenab at gmail dot com
"Just be aware that
ctype_digit('') == 1"

I tested this.

<?php
var_dump
(ctype_digit(''));
var_dump(phpversion());
?>

Result:

bool(false)
string(16) "5.2.4-2ubuntu5.3"
minterior at gmail dot com
10-Sep-2007 10:43
I use ctype_digit() function as a part of this IMEI validation function.

<?php

/**
 * Check the IMEI of a mobile phone
 * @param $imei IMEI to validate
 */
function is_IMEI_valid($imei){   
    if(!
ctype_digit($imei)) return false;
   
$len = strlen($imei);
    if(
$len != 15) return false;

    for(
$ii=1, $sum=0 ; $ii < $len ; $ii++){
        if(
$ii % 2 == 0) $prod = 2;
        else
$prod = 1;
       
$num = $prod * $imei[$ii-1];
        if(
$num > 9){
         
$numstr = strval($num);
         
$sum += $numstr[0] + $numstr[1];
        }else
$sum += $num;
    }

   
$sumlast = intval(10*(($sum/10)-floor($sum/10))); //The last digit of $sum
   
$dif = (10-$sumlast);
   
$diflast = intval(10*(($dif/10)-floor($dif/10))); //The last digit of $dif
   
$CD = intval($imei[$len-1]); //check digit

   
if($diflast == $CD) return true;

    return
false;
}
?>
ipernet at gmail dot com
19-Aug-2007 06:44
Be careful !

ctype_digit(36) === false because 36 is type INT and ctype_digit take only string

ctype_digit('36') === true
JustinB at harvest dot org dot REMOVE
16-Aug-2007 12:46
@robert at mediamonks dot com & withheld at withheld dot com:
I personally believe more in solutions than problems.  If you're concerned about the possibility of an int type variable being passed to ctype_digit()--and don't want to add another conditional statement using is_int() to avoid the problem--there's another simple solution: typecast it.

<?php
// The Problem
$test_values = array(123,'456','7eight9');
foreach(
$test_values as $test) {
    if(
ctype_digit($test)) echo 'True' . "\n";
    else echo
'False' . "\n";
}
// OUTPUT: False, True, False

// An Easy Solution
$test_values = array(123,'456','7eight9');
foreach(
$test_values as $test) {
    if(
ctype_digit((string)$test)) echo 'True' . "\n";
    else echo
'False' . "\n";
}
// OUTPUT: True, True, False
?>
robert at mediamonks dot com
12-Jul-2007 04:39
withheld at withheld dot com:
it is called : 'User Contributed Notes' not 'Bugs' so I am not saying there is something wrong with the function at all.

It is used for tips, tricks and simple mistakes people could make using the function. I just noted something just like that, nothing wrong with that.
withheld at withheld dot com
08-Jul-2007 05:06
robert at mediamonks dot com writes...

04-Jun-2007 11:46
I always used this function to check user input but it failed me when I wanted to check int's used in my script. This is caused by the fact that the function only functions right when the argument is a string. Here is a solution for this 'problem' :

Could we have some accuracy in these comments please? If the spec at the top of this page is taken to be correct then Robert is incorrect as it clearly states that the argument should be a string. Skimming notes in this section suggests to the reader that there is a problem with this function when actually people just arent reading the documentation - proliferation of careless mistakes.
robert at mediamonks dot com
04-Jun-2007 05:46
I always used this function to check user input but it failed me when I wanted to check int's used in my script. This is caused by the fact that the function only functions right when the argument is a string. Here is a solution for this 'problem' :

<?php
$intCheckThis
= 99;

$blnResult = ctype_digit($intCheckThis); // returns FALSE

$blnResult = ctype_digit(strval($intCheckThis)); // returns TRUE
?>

Note that user input from form or request uri is always handled as string anyway.
15-May-2007 03:31
You have your if() statement backwards. It's returning "This does not consist of only digits." when cytype_digit($var) is true.

<?php
$var
= 5;
if (
cytype_digit($var))
{
    echo
"This does not consist of only digits.";
}
else
{
    echo
"This cosists of only digits.";
}
?>
shivanfalcon at gmail dot com
07-May-2007 06:09
This function also seems to give a false for integers (PHP 4.4.4)
<?php
$var
= 5;
if (
cytype_digit($var))
{
    echo
"This does not consist of only digits.";
}
else
{
    echo
"This cosists of only digits.";
}
?>
Returns "This does not consist of only digits.".
I can only assume that this is because of how integers are seen.
2 = 00000010 bitwise
bitwise, 00000010 happens to be some ASCII formatting character, which isn't a digit.
reuvenab at gmail dot com
05-Apr-2007 05:44
Just be aware that
ctype_digit('') == 1

ctype_graph> <ctype_cntrl
Last updated: Fri, 02 Jan 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites