当尝试验证一个字段时,它似乎不起作用。当$postcode不是null时,我只需要执行!is_numeric。我确实有客户端验证,但我想确保我也有服务器端验证。
代码:
else if(!is_null($postcode) && !is_numeric($postcode))
{
$msg_to_user = '<br /><br /><h4><font color="FF0000">Postcode must be a numeric value.</font></h4>';
}发布于 2013-04-03 15:48:00
假设$postcode来自$POST或$GET,那么它始终是一个字符串。因此,无论如何,!is_null()都将为FALSE:
php> var_dump(is_null(""))
#=> bool(false)您可以恢复使用empty(),这更自由。然而,当涉及到这些检查时,PHP是完全不一致和奇怪的。例如,对于0,empty()也将返回FALSE。是啊。
php> $postcode = "";
php> var_dump(empty($postcode))
#=> bool(true)
php> $postcode = 0;
php>var_dump(empty($postcode))
#=> bool(true)一种更好的方法是做一些"duck-typing“。在您的示例中:当它可以转换为数值时,执行该操作并使用它。然后把它留给语言来决定它认为什么足够“数字”来转换。
php> var_dump((int) "")
int(0)
php> var_dump((int) "13")
int(13)所以:
else if(($postcode = (int) $postcode) && ($postcode > 0)) {
}最后,离题:注意你的业务假设:邮政编码并不总是数字的。是的,在美国大部分都是这样的。但还有更多的国家(以欧盟公民的身份这么说,他们经常访问那些假设每个人都是普通美国公民的网站)
发布于 2013-04-03 15:48:39
也许您想在strlen()函数上使用empty()函数,因为is_null()检查空值。如果$postcode为== "“,则不为空。
http://php.net/manual/en/function.is-null.php比你可以使用的
else if(!empty($postcode) && !is_numeric($postcode)) {或
else if(strlen($postcode) > 0 && !is_numeric($postcode)) {或
else if($postcode != "" && !is_numeric($postcode)) {正如链接中所指定的,如果您想使用is_null,最好使用$postcode !== NULL。快得多
发布于 2013-04-03 15:49:05
尝尝这个
else if(!empty($postcode) && !is_numeric($postcode)) {
$msg_to_user = '<br /><br /><h4><font color="FF0000">Postcode must be a numeric value.</font></h4>';
}希望这能有所帮助
https://stackoverflow.com/questions/15781442
复制相似问题