PHP Velho Oeste 2024

is_numeric

(PHP 4, PHP 5, PHP 7)

is_numeric 변수가 수나 수 문자열인지 확인합니다

설명

bool is_numeric ( mixed $var )

주어진 변수가 수인지 확인합니다. 수 문자열은 부수적인 부호, 숫자들, 부수적인 소수점 부분과 부수적인 지수부로 이루어집니다. 그러므로 +0123.45e6은 유효한 수 값입니다. 16진 표현(0xFF)도 허용되지만, 부호, 소수점, 지수부가 없어야 합니다.

인수

var

평가할 변수.

반환값

var가 수나 수 문자열이라면 TRUE를, 아니라면 FALSE를 반환합니다.

예제

Example #1 is_numeric() 예제

<?php
$tests 
= Array(
                
"42",
                
1337,
                
"1e4",
                
"not numeric",
                Array(),
                
9.1
                
);

foreach(
$tests as $element)
{
        if(
is_numeric($element))
        {
                echo 
"'{$element}' is numeric"PHP_EOL;
        }
        else
        {
                echo 
"'{$element}' is NOT numeric"PHP_EOL;
        }
}
?>

참고

  • ctype_digit() - Check for numeric character(s)
  • is_bool() - 변수가 논리형인지 확인
  • is_null() - 변수가 NULL인지 확인합니다
  • is_float() - 변수의 자료형이 소수인지 확인합니다
  • is_int() - 변수의 자료형이 정수인지 확인합니다
  • is_string() - 변수의 자료형이 문자열인지 확인합니다
  • is_object() - 변수가 객체인지 확인합니다
  • is_array() - 변수가 배열인지 확인

add a note add a note

User Contributed Notes 8 notes

up
93
sobolanx at gmail dot com
13 years ago
Note that the function accepts extremely big numbers and correctly evaluates them.

For example:

<?php
    $v
= is_numeric ('58635272821786587286382824657568871098287278276543219876543') ? true : false;
   
   
var_dump ($v);
?>

The above script will output:

bool(true)

So this function is not intimidated by super-big numbers. I hope this helps someone.

PS: Also note that if you write is_numeric (45thg), this will generate a parse error (since the parameter is not enclosed between apostrophes or double quotes). Keep this in mind when you use this function.
up
32
tanguy_barsik at hotmail dot com
7 years ago
for strings, it return true only if float number has a dot

is_numeric( '42.1' )//true
is_numeric( '42,1' )//false
up
12
moskalyuk at gmail dot com
17 years ago
is_numeric fails on the hex values greater than LONG_MAX, so having a large hex value parsed through is_numeric would result in FALSE being returned even though the value is a valid hex number
up
9
ben at chico dot com
10 years ago
Apparently NAN (Not A Number) is a number for the sake of is_numeric().

<?php
echo "is ";
if (!
is_numeric(NAN))
echo
"not ";
echo
"a number";
?>

Outputs "is a number". So something that is NOT a number (by defintion) is a number...
up
3
Magnus Deininger, dma05 at web dot de
15 years ago
regarding the global vs. american numeral notations, it should be noted that at least in japanese, numbers aren't grouped with an extra symbol every three digits, but rather every four digits (for example 1,0000 instead of 10.000). also nadim's regexen are slightly suboptimal at one point having an unescaped '.' operator, and the whole thing could easily be combined into a single regex (speed and all).

adjustments:

<?php
$eng_or_world
= preg_match
 
('/^[+-]?'. // start marker and sign prefix
 
'(((([0-9]+)|([0-9]{1,4}(,[0-9]{3,4})+)))?(\\.[0-9])?([0-9]*)|'. // american
 
'((([0-9]+)|([0-9]{1,4}(\\.[0-9]{3,4})+)))?(,[0-9])?([0-9]*))'. // world
 
'(e[0-9]+)?'. // exponent
 
'$/', // end marker
 
$str) == 1;
?>

i'm sure this still isn't optimal, but it should also cover japanese-style numerals and it fixed a couple of other issues with the other regexen. it also allows for an exponent suffix, the pre-decimal digits are optional and it enforces using either grouped or ungrouped integer parts. should be easier to trim to your liking too.
up
2
kouber at saparev dot com
20 years ago
Note that this function is not appropriate to check if "is_numeric" for very long strings. In fact, everything passed to this function is converted to long and then to a double. Anything greater than approximately 1.8e308 is too large for a double, so it becomes infinity, i.e. FALSE. What that means is that, for each string with more than 308 characters, is_numeric() will return FALSE, even if all chars are digits.

However, this behaviour is platform-specific.

http://www.php.net/manual/en/language.types.float.php

In such a case, it is suitable to use regular expressions:

function is_numeric_big($s=0) {
  return preg_match('/^-?\d+$/', $s);
}
up
2
Katrina Kizenbach
1 year ago
Note that is_numeric() will evaluate to false for number strings using decimal commas.

is_numeric('0.11');
Output: true

is_numeric('0,11');
Output: false
up
-6
anantkumarsingh03101988 at gmail dot com
1 year ago
Example #2

Output:

'9001 ' is NOT numeric

is incorrect for PHP8, it's numeric.

So please correct this.
To Top