【问题标题】:PHP equivalent of JavaScript's parseInt function? [duplicate]PHP 等效于 JavaScript 的 parseInt 函数? [复制]
【发布时间】:2012-09-20 23:24:58
【问题描述】:

可能重复:
Check if a variable is a natural number

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

【问题讨论】:

标签: php function digit


【解决方案1】:

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

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

话虽如此,如果您只想将字符串转换为整数,那么有几种选择:

$int = (int)$string;

$int = intval($string);

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

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

如果您真的想要 NaN 错误,您将得到最接近的 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()preg_replace(),但对于这种情况,这些绝对是矫枉过正。

【讨论】:

  • 使用 (int) 和 intval() 非常防错,但请注意,如果字符串表示浮点数(即有小数),那么这些函数只会删除该点之后的任何内容.所以“3.999”变成了3。
  • @Wytze:是的,但问题是专门要求删除非数字字符,因此假设它不是小数。如果您需要处理小数,还有其他选项。
【解决方案2】:

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

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

$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);

【讨论】:

  • 啊,正是我想要的。非常感谢。
  • @think123 - 值得指出的是 (a) 这不会产生 int;它仍然是一个字符串,尽管只包含数字,并且 (b) 正则表达式对于这种情况来说是多余的。
  • 没错,但这是真正有效的方法之一。我会照旧编辑。
  • 警告!这是非常危险的,因为同一字符串中的数字将被读取为一个。 (例如 asd25asd56aa -> 2556)
【解决方案3】:

你可以使用:

$string = "90"; //string
$myInt = (int) $string; //parse to int

【讨论】:

  • 对不起,但这不是我想要的。 (int) 不会删除所有非数字字符,如果字符串中有任何非数字字符,它只会返回 0
  • @think123:类型转换 (int) 将与 javascript 中的 parseInt() 执行相同的操作。这是你问的,不是吗?
  • 直奔主题。
【解决方案4】:

我建议使用 FILTER_VALIDATE_INT 过滤器。

about Filters on php.net

【讨论】:

  • -1 请不要放置 w3schools 链接。请改用php.net,我会给你投票。
  • +2 将您的票投给您,这是有保证的。
  • 哦,只是出于某种原因:w3fools.com
【解决方案5】:

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

<?php

    $str = "10";

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

    echo $intVal;
?>

输出:

100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2013-10-01
    • 2018-03-11
    相关资源
    最近更新 更多