Bra*_*ley 1 php string numeric isnumeric
我正在尝试理解 PHP 中的数字字符串。我有以下代码:
var_dump(5 * "10 abc");
var_dump(is_numeric("10 abc"));
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
int(50)
bool(false)
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为字符串“10 abc”似乎被解释为第一个表达式中的数字字符串(因此 int(50) 输出并且没有关于使用非数字值的警告),但是当通过 is_numeric() 运行时函数它返回 false,表明它实际上不是数字字符串。
我花了一些时间查看文档来理解这种行为,但找不到任何具体的答案,有人可以帮助解释是什么导致了这种行为吗?
我知道 PHP 8.0.0 对数字字符串的含义进行了一些更改,但这是我现在正在尝试理解的 PHP 7.1.33。
小智 5
“Saner numeric string”RFC 的 RFC 作者,已在此处接受 PHP 8.0。
"10 abc"不是一个数字字符串,而是一个前导数字字符串,这意味着该字符串的开头看起来像一个数字,但它不是一个数字,因为字符串中的某些位置存在乱码(这包括空格)。
因为is_numeric()根据 PHP 的定义检查一个值是否被视为数字(在 PHP 8.0 之前意味着前导空格后跟 + 或 - 符号以及任何整数、普通十进制数或指数表示法中的数字),因此它将返回false仅被视为前导数字的字符串。
然而,算术运算尝试将其操作数转换为正确的数字类型(int 或 float),并因此"10 abc"被转换为, 10因为 PHP 会将前导数字字符串转换为其前导数字值。
更多“有趣”的细节和边缘案例可以在PHP RFC 的技术背景部分找到。
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |