25

可能重复:
检查变量是否为自然数

刚刚遇到我需要清理输入并使用 PHP 删除所有非数字字符的地方。想自己做一个函数,但只是首先想检查可能的内置函数,所以我不必花额​​外的时间重新发明轮子。

4

5 回答 5

35

在 PHP 中没有直接的等价物,pareseInt()因为 PHP 没有NaN数据类型。如果无法解析该值,parseInt()将产生。NaN

此外,parseInt()还有 radix 参数,PHP 选项都没有提供。

但是就是说,如果您只想将字符串转换为整数,那么有几种选择:

$int = (int)$string;

$int = intval($string);

$int = settype($string,'integer');

这三个都将以几乎相同的方式工作。可能存在一些与其他两种不同的边缘情况intval(),但一般来说,它们会将字符串转换为 int。在没有 的情况下,如果字符串是非数字且无法解析NaN,它们都会输出(零)。0但这对于大多数数据库卫生目的来说应该足够了。

如果你真的想要一个NaNon 错误,你会得到最接近的是null. 你可以使用filter_var()

$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);

如果您只想检查字符串是否为数字,该is_numeric()函数可以执行以下操作:

$bool = is_numeric($string);

但是,它对小数和科学记数法返回 true,因此对于大多数情况可能并不完美。ctype_digit()如果字符串仅由数字组成,则更好的选择是返回 true:

$bool = ctype_digit($string);

如果这些都不适合,总是有正则表达式选项,使用preg_match()or preg_replace(),但对于这种情况,这些绝对是矫枉过正。

于 2012-09-29T08:00:57.417 回答
32

您可以使用正则表达式如下

$int = (int) preg_replace('/\D/', '', $strNonNumeric);

或者

$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
于 2012-09-29T07:29:32.560 回答
5

您可以使用:

$string = "90"; //string
$myInt = (int) $string; //parse to int
于 2012-09-29T07:27:18.093 回答
3

我会推荐使用 FILTER_VALIDATE_INT 过滤器。

关于 php.net 上的过滤器

于 2012-09-29T07:31:32.963 回答
0

您也可以使用 sscanf (就像在 C 中一样)

<?php

    $str = "10";

    sscanf($str, "%d", $intVal);
    $intVal *= 10;

    echo $intVal;
?>

输出:

100

于 2012-09-29T07:29:41.217 回答