is_numeric的坑
编辑时间:2020-10-23 18:03:20 作者:666666

PHP is_numeric的坑

正常情况下,我们判断一个变量是否是数字类型会使用 is_numeric 这个函数,因为is_intis_float都是针对指定类型的判断。

但是,我们运行以下代码的时候,以为是false,但是发现打印出来的结果是 true

var_dump(is_numeric('123E456')); // true

为什么会这样呢?

首先,我们需要先知道 123E456 到底是个什么东西

1e-10表示1*10^-10 这是一种指数形式的计数方法。由数符、十进制数、阶码标志'E'或'e'以及阶符和阶码组成。 如:

-1e-3的数符为'-',十进制数为1,阶符为'-',阶码为3

1e-10的数符被省略了(默认为'+'),十进制数为1,阶符为'-',阶码为10

注:阶码标志'E'或'e'之前必须有数字。

了解了 123E456 的组成,我们来看看is_numeric函数到底是怎么判断的呢

is_numeric 会检测是否为数字字符串,可为负数和小数,科学计数法如 110e2 会认为是数字。

所以我们判断123E456时会与预期不符

那么我们是否有替换的函数呢。答案是肯定的,我们使用下面的函数即可解决问题

ctype_digit 检测字符串中的字符是否都是数字,负数和小数会检测不通过。

var_dump(ctype_digit('123E456')); // false

 点赞 0
 收藏 0
 分享
来说两句吧
最新评论
    暂无评论
天气预报
万年历
2015年
7月
返回今天

博客声明

本博客属个人所有,不涉及商业目的。遵守中华人民共和国法律法规、中华民族基本道德和基本网络道德规范,尊重有节制的言论自由和意识形态自由,反对激进、破坏、低俗、广告、投机等不负责任的言行。所有转载的文撰写页面章、图片仅用于说明性目的,被要求或认为适当时,将标注署名与来源。避免转载有明确“不予转载”声明的作品。若不愿某一作品被转用,请及时通知本人。对于无版权或自由版权作品,本博客有权进行修改和传播,一旦涉及实质性修改,本博客将对修改后的作品享有相当的版权。二次转载者请再次确认原作者所给予的权力范围。

本博客所有原创作品,包括文字、资料、图片、网页格式,转载时请标注作者与来源。非经允许,不得用于赢利目的。本博客受中国知识产权、互联网法规和知识共享条例保护和保障,任何人不得进行旨在破坏或牟取私利的行为。本博客声明以简体中文版为准,不对其他语言版本负责。

如有侵权请及时联系我进行处理。邮箱youseeim666@163.com