我正在尝试过滤所有字母和特殊字符,并且只允许数字。但每当我将0作为变量传递时,它就会让我失误。
$string = 0;
if(preg_replace('/[^0-9]/', '', $string) == true){
echo 'True';
}else{
echo 'False';
}
答案 0 :(得分:0)
<强> preg_replace 强>
如果找到匹配项,则返回新主题,否则返回 如果发生错误,主题将保持不变或为NULL。
当您检查preg_replace('/[^0-9]/', '', $string) == true
后,它会在删除所有非数字字符(仍为'0'
)之后检查字符串'0'
,并查看它是否评估为TRUE
}。字符串'0'
和int 0
都评估为FALSE
。我'0' == FALSE && 0 == FALSE
。这就是为什么您的情况从FALSE
返回'0' == FALSE
。
您可以改为将条件更改为:preg_replace('/[^0-9]/', '', $string) != ''
现在,您将在过滤掉所有非数字字符后检查您的字符串是否为空。即如果您的字符串仅包含非数字字符,它将返回FALSE
。