【发布时间】:2012-09-20 23:24:58
【问题描述】:
刚刚遇到我需要清理输入并使用 PHP 删除所有非数字字符的地方。想自己做一个函数,但只是想先检查一下可能的内置函数,这样我就不必花额外的时间重新发明轮子了。
【问题讨论】:
-
为什么不直接使用intval?
刚刚遇到我需要清理输入并使用 PHP 删除所有非数字字符的地方。想自己做一个函数,但只是想先检查一下可能的内置函数,这样我就不必花额外的时间重新发明轮子了。
【问题讨论】:
在 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 = (int) preg_replace('/\D/', '', $strNonNumeric);
或
$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
【讨论】:
你可以使用:
$string = "90"; //string
$myInt = (int) $string; //parse to int
【讨论】:
(int) 不会删除所有非数字字符,如果字符串中有任何非数字字符,它只会返回 0。
(int) 将与 javascript 中的 parseInt() 执行相同的操作。这是你问的,不是吗?
我建议使用 FILTER_VALIDATE_INT 过滤器。
【讨论】:
php.net,我会给你投票。
您也可以使用 sscanf(就像在 C 中一样)
<?php
$str = "10";
sscanf($str, "%d", $intVal);
$intVal *= 10;
echo $intVal;
?>
输出:
100
【讨论】: