在php中转换为int的字符串

时间:2016-11-24 10:04:05

标签: php string validation casting

好的,我只是偶然发现了PHP中的奇怪行为 验证用户输入是否为整数。

当我尝试将字符串12345A转换为int例如

$int_var = (int)'12345A';

我得到了12345。

为什么PHP不会抛出异常,而是默默地省略'A'?

2 个答案:

答案 0 :(得分:3)

当你做这样的演员表时,PHP会尽力转换为数字,包括剥离非数字字符。

如果你想确定它是一个int,你可以使用struct foo { void bar() { if(this == nullptr) { sink(__LINE__); } if((uintptr_t)this < 0x10) { sink(__LINE__); } if((volatile uintptr_t)this < 0x10) { sink(__LINE__); } } }; ,如:

is_int()

答案 1 :(得分:2)

PHP tries to convert字符串的初始部分为整数类型:

  

该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。否则,该值将为0(零)。

如果正在转换的变量是标量,则类型转换功能不应抛出异常,也不应以任何其他方式失败。如果变量是一个对象,它将触发通知,但仍会执行转换。

如果您想检查,如果$t变量包含数值,请使用is_numeric

if (is_numeric($t)) {
  // ...
}

请勿使用is_int,因为如果$t'1234'之类的字符串(通常就是这种情况),那么is_int将返回false ,因为类型为string,但不是int

另外,在检查之前考虑trim ming $t

$t = trim($t);

因为用户可能会提交" 123"之类的内容。但是应用程序通常不应该因为领先的空间而失败。