【发布时间】:2021-03-06 17:39:24
【问题描述】:
我正在尝试理解 PHP 中的数字字符串。 我有以下代码:
var_dump(5 * "10 abc");
var_dump(is_numeric("10 abc"));
这给了我输出:
int(50)
bool(false)
这让我感到困惑,因为字符串 "10 abc" 似乎在第一个表达式中被解释为数字字符串(因此 int(50) 输出并且没有关于使用非数字值的警告),但是当运行 is_numeric() 函数时,它返回 false,表明它实际上不是数字字符串。
我花了一些时间查看文档以了解此行为,但找不到任何具体答案,有人可以帮助解释导致此行为的原因吗?
我知道 PHP 8.0.0 对数字字符串进行了一些更改,但这是我现在正在尝试理解的 PHP 7.1.33。
【问题讨论】:
-
在第一个表达式中,“10 abc”转换为 int,得到
10。而且这和is_numericcheck没有关系。 -
我建议不要使用
is_numeric()和empty()。 IMO 两者都非常“松软”。 F.e.empty('0')是真的,这是 IMO 错误的,因为我有一个带字符的字符串。关于is_numeric,如果您期望一个int ((int)$val),我建议转换为int。然后,您还可以检查原始值是否符合 int-casted 值。 -
顺便说一句:有更好的功能 -
ctype_*功能。在你的情况下ctype_digit.
标签: php string numeric isnumeric