检查字符串是否包含整数

2022-08-30 11:58:57

您知道一个可以检查字符串是否包含整数的函数吗?

以下是我期望它的工作方式:

holds_int("23") // should return true.  
holds_int("2.3") // should return false.  
holds_int("qwe") // should return false.

答案 1
if((string)(int)$var == $var) {
    echo 'var is an integer or a string representation of an integer';
}

示例结果:

var_dump( test(1)             ); // TRUE
var_dump( test('1')           ); // TRUE
var_dump( test('1.0')         ); // TRUE
var_dump( test('1.1')         ); // false
var_dump( test('0xFF')        ); // false
var_dump( test('0123')        ); // TRUE
var_dump( test('01090')       ); // TRUE
var_dump( test('-1000000')    ); // TRUE
var_dump( test('+1000000')    ); // TRUE
var_dump( test('2147483648')  ); // false
var_dump( test('-2147483649') ); // false

请参阅下面的 Gordon 的回答,了解如果用于比较而不是 , 这将如何以不同的方式运行。=====


答案 2

不是最快的方法,但filter_var()非常准确:

function test($s)
{
    return filter_var($s, FILTER_VALIDATE_INT) !== false;
}

以下是基于Jhong答案的结果,差异标记为:!!

var_dump(test(1)            ); // true
var_dump(test('1')          ); // true
var_dump(test('1.0')        ); // false !!
var_dump(test('1.1')        ); // false
var_dump(test('0xFF')       ); // false
var_dump(test('0123')       ); // false !!
var_dump(test('01090')      ); // false !!
var_dump(test('-1000000')   ); // true
var_dump(test('+1000000')   ); // true
var_dump(test('2147483648') ); // true !! on 64bit
var_dump(test('-2147483649')); // true !! on 64bit

要允许八进制整数:

function test($s)
{
   return filter_var($s, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_OCTAL) !== false;
}

结果:

var_dump(test('0123') ); // true
var_dump(test('01090')); // false !!

要允许使用十六进制表示法:

function test($s)
{
   return filter_var($s, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX) !== false;
}

结果:

var_dump(test('0xFF')); // true !!

推荐