在 PHP 中测试变量是否为数字的正确方法是什么?


What's the correct way to test if a variable is a number in PHP?

当我从数据库中获取数据时,结果是一个字符串,即使它有一个数字值。我的意思是:

// An integer
$int=10;
if(is_int($int)) // Returns true
...
// A string
$int='10';
if(is_int($int)) // Returns false
...

我希望这两个都返回 true。

如果您希望它接受浮点值,请使用is_numeric(),并且仅对整数ctype_digit()

你正在寻找 is_numeric((。

http://php.net/is_numeric

不能用引号(单引号或双引号(将变量括起来,
用引号括起来的任何内容都将被视为字符串

请参阅:- http://php.net/manual/en/language.types.string.php

数据库返回的所有内容(假设是 mysql(始终是 STRING,
对于您的情况,它将是一个数字字符串
功能is_numeric(如其他人所提到的(是正确的方法

is_numeric — 查找变量是数字还是数字字符串

我有点黑客,但可能是检查值是否"与整数模式匹配"的更有力的方法。我的意思是它可能/可能不会显式转换为整数,但它具有一个整数的所有特征。

function isInt($i){
  return (is_numeric($i)  // number, but not necessarily an integer
       && (int)$i == $i); // when cast it's still the same "number"
}

示例(尝试自己的输入,看看它是如何站起来的(

将变量强制转换为所需的类型。

允许的演员表是:

    (
  • 整数(、(整数( - 转换为整数
  • (
  • 布尔值(、(布尔值(- 转换为布尔值
  • (
  • 浮点(、(双(、(真实(- 投射到浮点
  • (字符串( - 强制转换为字符串
  • (数组( - 强制转换为阵列
  • (对象( - 投射到对象
  • (未设置( - 强制转换为空 (PHP 5(

法典:

<?
header( 'content-type: text/plain' );
$var = '10.1';
var_dump( (int)$var );
var_dump( (bool)$var );
var_dump( (float)$var );
var_dump( (string)$var );
var_dump( (array)$var );
var_dump( (object)$var );
var_dump( (unset)$var );

输出:

int(10)
bool(true)
float(10.1)
string(4) "10.1"
array(1) {
  [0]=>
  string(4) "10.1"
}
object(stdClass)#1 (1) {
  ["scalar"]=>
  string(4) "10.1"
}
NULL
function is_number($s){
    return in_array(str_replace(str_split('0123456789'), '', $s), array(',','.',''));
}