php:is_numeric以不同的方式对待前导空格和尾随空格

时间:2019-02-11 19:40:36

标签: php types type-conversion php-7.3

我的php版本:

➜  ~ php -v
PHP 7.3.1 (cli) (built: Jan 10 2019 13:16:34) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.1, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.1, Copyright (c) 1999-2018, by Zend Technologies

我不明白为什么函数is_numeric中的间隔值会表现为这样?

➜  ~ php -a

php > var_dump(is_numeric('0012432'));
bool(true)
php > var_dump(is_numeric(' 0012432'));
bool(true)
php > var_dump(is_numeric('0012432 '));
bool(false)

2 个答案:

答案 0 :(得分:1)

此函数与is_int(),is_float(),is_real(),is_long()和is_double()的处理方式不同。

is_numeric(" 12345") = true
is_int(" 12345") = false
is_float(" 12345") = false
is_real(" 12345") = false
is_long(" 12345") = false
is_double(" 12345") = false

我发现针对这些情况打开了一个错误报告,不确定是否可以解决此问题,

Bug report

答案 1 :(得分:0)

接受数字字符串的核心PHP语言的所有其他部分也是如此。这是一个令人烦恼的不一致,但这是有意的,并且已经有很多年了。我个人打算在将来的版本中修复此问题。