Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的字符串到int转换_Php_String_Validation_Casting - Fatal编程技术网

php中的字符串到int转换

php中的字符串到int转换,php,string,validation,casting,Php,String,Validation,Casting,好的,我在尝试 验证用户输入是否为整数 当我试图将字符串12345A转换为int时,例如 $int_var = (int)'12345A'; 我得到12345 为什么PHP不抛出一个异常,但悄悄地忽略了“A”?当您进行这样的转换时,PHP将尽最大努力转换为数字,包括去掉非数字字符 如果要确保它是int,可以使用is_int(),如下所示: $t = '12345A'; if (!is_int($t)) throw new Exception('Not an integer: ' . $t);

好的,我在尝试
验证用户输入是否为整数

当我试图将字符串
12345A
转换为int时,例如

$int_var = (int)'12345A';
我得到12345


为什么PHP不抛出一个异常,但悄悄地忽略了“A”?

当您进行这样的转换时,PHP将尽最大努力转换为数字,包括去掉非数字字符

如果要确保它是int,可以使用
is_int()
,如下所示:

$t = '12345A';
if (!is_int($t)) throw new Exception('Not an integer: ' . $t);
将字符串的初始部分转换为整数类型:

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

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

如果要检查,如果
$t
变量包含数值,请使用
is\u numeric

if (is_numeric($t)) {
  // ...
}
不要使用
is_int
,因为如果
$t
是一个类似
'1234'
的字符串(通常是这种情况),那么
is_int
将返回
false
,因为类型是
string
,而不是
int

也要考虑<代码>修饰符< />代码>明文> $t/COD>检查前:

$t = trim($t);

因为用户可能会提交类似于
“123”
的内容。但是应用程序通常不应该仅仅因为前导空格而失败。

因为这就是它的设计目的?所以我应该循环字符串并检查字符是否是一个数字吗?如果使用32位系统,并且需要一个大于PHP_MAX_int的大整数,则后者更好。您到底想做什么?读取类型杂耍:这将失败,因为$t不是整数,而是字符串。见公认的答案。