PHP中与JavaScript的parseInt函数相对应的是什么?

25

可能是重复问题:
检查一个变量是否为自然数

我刚刚碰到一个需要用PHP对输入进行清理并删除所有非数字字符的情况。想着自己编写一个函数,但首先想要查看可能存在的内置函数,这样就不必花费额外的时间重新发明轮子了。


请查看php.net/Type Casting - air4x
1
为什么不直接使用intval呢? - endy
5个回答

35

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

此外,parseInt()具有基数参数,而PHP选项中没有任何基数参数可用。

但是,如果你只想将字符串转换为整数,那么有几个选项:

$int = (int)$string;

$int = intval($string);

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

这三个函数的工作方式基本相同。可能存在一些特殊情况,intval() 与其他两个函数不同,但通常它们都可以将一个字符串转换为整数。在没有 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
@Wytze:没错,但问题特别要求删除非数字字符,因此假设它不是十进制数。如果需要处理小数,还有其他选项。 - Spudley

32

您可以按照以下正则表达式进行操作。

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

或者

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

啊,正是我想要的。非常感谢。 - Lucas
2
@think123 - 值得指出的是,(a) 这不会产生一个整数;它仍然是一个字符串,尽管只包含数字,而且 (b) 正则表达式在这种情况下有些过度。 - Spudley
1
真的,但这是实际有效的其中之一。我仍然会进行编辑。 - Lucas
警告!这非常危险,因为同一字符串中的数字将被读取为一个数字。(例如:asd25asd56aa -> 2556) - LoxLox

5

您可以使用:

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

抱歉,但那并不是我想要的。(int) 不会移除所有非数字字符,它只会在字符串中存在任何非数字字符时返回 0 - Lucas
4
(int) 类型转换与 JavaScript 中的 parseInt() 功能相同。这就是你所问的,对吗? - Glavić
直截了当。 - Sergio A.

3

请不要放置w3schools的链接。请放置一个php.net的链接,我会把你的投票还给你。 - Lucas
1
+2 给了你保证的投票。 - Lucas
4
哦,只是为了一些原因:http://www.w3fools.com。 - Lucas

0

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

<?php

    $str = "10";

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

    echo $intVal;
?>

输出:

100


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接