1

尝试验证字段时,它似乎不起作用。我只需要在不是!is_numeric时执行。我确实有客户端验证,但我想确保我也有服务器端验证。$postcodenull

代码:

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>';
}
4

3 回答 3

2

假设$postcode 来自 a$POST$GET,它总是一个字符串。!is_null()因此将是 FALSE,无论:

php> var_dump(is_null(""))
#=> bool(false)

您可以恢复使用empty()更自由的 using 。然而,当涉及到这些检查时,PHP 是完全不一致和奇怪的。例如,empty()也将返回FALSE0。是的。

php> $postcode = "";
php> var_dump(empty($postcode))
#=> bool(true)
php> $postcode = 0;
php>var_dump(empty($postcode))
#=> bool(true)

一个更好的方法是做某种“鸭式打字”。在您的情况下:当它可以转换为数值时,请执行此操作并使用它。然后将其留给语言来确定它认为“数字-ish”足以转换的内容。

php> var_dump((int) "")
int(0)
php> var_dump((int) "13")
int(13)

所以:

else if(($postcode = (int) $postcode) && ($postcode > 0)) {
}

最后,题外话:注意关于您的业务假设的警告:邮政编码并不总是数字。是的,在美国大多数是。但是那里有更多的国家(说这是欧盟公民,他们经常出现在假设每个人都是普通美国公民的网站上)

于 2013-04-03T07:47:59.810 回答
2

也许您想在 strlen() 函数上使用 empty() 函数,因为 is_null() 检查 NULL 值。如果 $postcode 是 == "" 它不是 NULL。

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-03T07:48:39.137 回答
0

尝试这个

else if(!empty($postcode) && !is_numeric($postcode))  {
  $msg_to_user = '<br /><br /><h4><font color="FF0000">Postcode must be a numeric value.</font></h4>';
}

希望这可以帮助

于 2013-04-03T07:49:05.190 回答