如何检查字符串是否是int,但不是双精度等?
PHP有一个函数,可以将字符串转换为整数。但是,我想事先检查字符串是否为整数,以便在错误时可以向用户提供有用的错误消息。PHP 有 ,但对于像 .intval()is_int()"2"
PHP 具有该函数,但如果数字为双精度值,则返回 true。我想要一些东西,对于双精度返回false,但对于int返回true。is_numeric()
例如:
my_is_int("2") == TRUE
my_is_int("2.1") == FALSE
PHP有一个函数,可以将字符串转换为整数。但是,我想事先检查字符串是否为整数,以便在错误时可以向用户提供有用的错误消息。PHP 有 ,但对于像 .intval()is_int()"2"
PHP 具有该函数,但如果数字为双精度值,则返回 true。我想要一些东西,对于双精度返回false,但对于int返回true。is_numeric()
例如:
my_is_int("2") == TRUE
my_is_int("2.1") == FALSE
使用ctype_digit怎么样?
从手册中:
<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
if (ctype_digit($testcase)) {
echo "The string $testcase consists of all digits.\n";
} else {
echo "The string $testcase does not consist of all digits.\n";
}
}
?>
上面的示例将输出:
The string 1820.20 does not consist of all digits. The string 10002 consists of all digits. The string wsl!12 does not consist of all digits.
这仅在您的输入始终为字符串时才有效:
$numeric_string = '42';
$integer = 42;
ctype_digit($numeric_string); // true
ctype_digit($integer); // false
如果您的输入类型可能是 ,则与 is_int 结合使用。intctype_digit
如果您关心负数,则需要检查前面的 输入,如果是这样,请调用输入字符串的子字符串。像这样的东西会这样做:-ctype_digit
function my_is_int($input) {
if ($input[0] == '-') {
return ctype_digit(substr($input, 1));
}
return ctype_digit($input);
}
filter_var应该这样做:
var_dump(filter_var('2', FILTER_VALIDATE_INT)); // 2
var_dump(filter_var('2.0', FILTER_VALIDATE_INT)); // false
var_dump(filter_var('2.1', FILTER_VALIDATE_INT)); // false
但
var_dump(filter_var(2, FILTER_VALIDATE_INT)); // 2
var_dump(filter_var(2.0, FILTER_VALIDATE_INT)); // 2
var_dump(filter_var(2.1, FILTER_VALIDATE_INT)); // false
如果您只想将布尔值作为返回值,请将其包装到一个函数中,例如
function validatesAsInt($number)
{
$number = filter_var($number, FILTER_VALIDATE_INT);
return ($number !== FALSE);
}