is_numeric,intval,ctype__digit ..你能依靠它们吗?

6 php regex numeric

is_numeric,intval,ctype__digit ..你能依靠它们吗?

还是我必须使用正则表达式?

function isNum($str) {
return (preg_match("/^[0-9]+$/", $str));
}

你们有什么感想?我是傻瓜吗?

mmr*_*151 13

ctype_digit和之间的一个重要区别is_numerict是负值和浮点数.

is_numeric(-10)将返回,true而'ctype_digit(-10)'将是false

ctype_digit(12.50)将返回false,而 is_numeric(12.50)true

所以它们都很方便,取决于你的域逻辑的上下文.

  • 请注意,`ctype_digit(10)`也将是'false`,因为它只适用于字符串.你应该在进行验证之前强制转换为字符串:`ctype_digit((string)10)`返回`true`. (6认同)

Kev*_*ney 12

is_numeric,intval和ctype_digit都做了很多不同的事情.

is_numeric将告诉您变量的内容是否为数字(即如果它是浮点或整数值,则为true).

intval尝试将一串数字转换为整数值

ctype_digit将告诉您字符串是否只包含数字字符(将执行与isNum函数相同的检查).

最好的方法可能是检查is_numeric是否为真,然后使用settype($ myvalue,'integer')或intval($ myvalue)行的东西;


Gum*_*mbo 5

您命名了两种函数:

一个验证检查,如果给定值具有给定的特点,并返回要么
is_numericctype_*函数和您的isNum函数正在验证函数,因为它们只是告诉您一个值是否有效。

一个过滤器改变,新的价值具有给定的特征,因此将这样的方式给定值有效
intval并且这些filter_*函数是过滤函数,因为它们总是会返回通过验证器的有效值。


Jos*_*osh 0

我不是 PHP 专家,但是您是否考虑过编写数据驱动的单元测试来具体了解这些函数。如果您不确定它们的可靠性并且文档也不清楚,那么没有什么比可以测试 1000 个排列及其预期输出的单元测试更好的了。

您实际上甚至不必像我想象的那样走得那么远,您只想测试一些特殊的边缘情况。您的编程技能和编译器是您最好的朋友。您编写的程序将证实或否认您的怀疑。

此外,为了获得额外的好处,您可以监控每种方法需要多长时间,看看哪种方法性能更好。

只是一个想法。