需要ctype_digit才能为负数返回true

时间:2016-01-16 22:49:36

标签: php

如果字符串中只有正数或负数,我需要取一个字符串并返回true。有没有办法做到这一点?

$rating = "-25";
if (!ctype_digit($rating)) {
echo "Not a digit.";
} 
else {
echo "Is a digit.";
} 

结果:

不是数字。

需要结果:

是数字。

2 个答案:

答案 0 :(得分:2)

ctype_digit()适用于仅包含 数字的值。 其中$rating = -25;为false,因为在此特定情况下将其视为ASCII代码(如下所述),"-25"无效,因为-不是数字。 您可以输入juggle,但我认为您正在寻找is_numeric()

echo is_numeric( "-25");echo ctype_digit((integer) $var);

但是,如果字符串无法转换为整数,后者将返回true。如果是这种情况,它的值为0.

重要: 如果将-128255范围内的文字整数传递给ctype_digit(),则该值将转换为ASCII表中定义的字符。如果它不是数字,则预期为假。任何其他整数值都是正常的预期行为。

答案 1 :(得分:0)

根据文档,

filter_var 是这个问题的正确答案,自 5.2 以来一直存在。

filter_var 将返回过滤数据或 false 如果字符串不是有效整数。

var_dump(filter_var("1", FILTER_VALIDATE_INT) !== false);
var_dump(filter_var("0", FILTER_VALIDATE_INT) !== false);
var_dump(filter_var("-1", FILTER_VALIDATE_INT) !== false);

结果:

test.php:1:boolean true
test.php:2:boolean true
test.php:3:boolean true

请注意,您必须使用 false 而不是逻辑 ! 执行比较,否则与 0 比较时会失败。