2012-09-29 317 views
13

可能重复:
Check if a variable is a natural numberPHP的等价JavaScript的parseInt函数?

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

+0

检查[php.net/Type Casting](http://php.net/manual/en/language.types.type-juggling.php) – air4x

+0

为什么不只是使用intval? – endy

回答

23

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

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

OR

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

啊,正是我想要的。非常感谢。 – think123

+2

@ think123 - 值得指出的是(a)这不会产生一个int;它仍然是一个字符串,虽然只包含数字,并且(b)正则表达式对于这种情况是过度的。 – Spudley

+1

确实如此,但这是实际工作的人之一。我将编辑它一切。 – think123

2

您可以使用:

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

对不起,但那不完全是我想要的。 '(int)'不会删除所有的非数字字符,如果字符串中有非数字字符,它将返回'0'。 – think123

+2

@ think123:在javascript中,类型转换'(int)'和'parseInt()'的作用相同。这是你问的,不是吗? –

0

您还可以使用sscanf的(就像在C做)

<?php 

    $str = "10"; 

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

    echo $intVal; 
?> 

输出:

3

我会建议使用FILTER_VALIDATE_INT过滤器。

about Filters on php.net

+0

-1请不要放置w3schools链接。把一个'php.net'代替,我会给你回票。按照保证, – think123

+1

+2给你你的投票。 – think123

+3

哦,只是为了某种原因:http://www.w3fools.com – think123

19

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

另外,parseInt()有基数参数,这些PHP选项都不给你。

虽如此,但如果你想要做的是把一个字符串转换成整数,那么有几种选择:

$int = (int)$string; 

$int = intval($string); 

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

这三个将在大致相同的方式工作的。可能存在一些边界情况,其中intval()与其他两个不同,但通常它们会将字符串转换为int。在没有NaN的情况下,如果字符串是非数字并且不能被分析,则它们全部输出0(零)。但是这对于大多数DB卫生目的应该是足够的。

如果你真的想要一个在NaN上的错误,你会得到最接近的是null。您可以使用filter_var()得到这样的:

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

如果你只是想检查该字符串的数字,该is_numeric()功能可以做到这一点:

$bool = is_numeric($string); 

然而,返回小数真实,也为科学记数法,因此在大多数情况下可能并不完美。更好的选择是ctype_digit()如果字符串仅由数字返回true:

$bool = ctype_digit($string); 

如果这个套装的非E,总有正则表达式的选项,使用preg_match()preg_replace(),但这些肯定是矫枉过正这种情况。

+0

使用(int)和intval()是非常错误的,但要注意,如果字符串表示浮点数(即有小数) ,那么这些功能只是删除点后的任何东西。所以“3.999”变成3. – Wytze

+0

@Wytze:是的,但问题是要求删除非数字字符,所以假设它不是小数。如果您需要处理小数,还有其他选项。 – Spudley