刚刚遇到我需要清理输入并使用PHP删除所有非数字字符的地方。考虑自己制作一个功能,但首先想要检查可能的内置功能,所以我不必花费额外的时间重新发明轮子。
答案 0 :(得分:28)
您可以使用正则表达式,如下所示
$int = (int) preg_replace('/\D/', '', $strNonNumeric);
OR
$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
答案 1 :(得分:25)
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()
使用正则表达式选项,但这些对于这种情况来说肯定是过度的。
答案 2 :(得分:5)
您可以使用:
$string = "90"; //string
$myInt = (int) $string; //parse to int
答案 3 :(得分:3)
我建议使用FILTER_VALIDATE_INT过滤器。
答案 4 :(得分:0)
您也可以使用sscanf(就像在C中一样)
<?php
$str = "10";
sscanf($str, "%d", $intVal);
$intVal *= 10;
echo $intVal;
?>
<强>输出:强>
100