0

这似乎是一个很简单的问题,我在这里使用“0888”作为我的输入值示例。我研究了一段时间并尝试了不同的方法,例如

(int) "0888";
intval("0888");
floatval("0888");
settype("0888", "integer");

不幸的是,它们似乎都不起作用。参考1 参考2 参考3

$num = $_POST['postcode'];

if((1000 <= $num && $num <= 1999) || (2000 <= $num && $num <= 2599) || (2619 <= $num && $num <= 2898) || (2921 <= $num && $num <= 2999)){
    $state = "NSW";
}
elseif((0200 <= $num && $num <= 0299) || (2600 <= $num && $num <= 2618) || (2900 <= $num && $num <= 2920)){
    $state = "ACT";
}
elseif((3000 <= $num && $num <= 3999) || (8000 <= $num && $num <= 8999)){
    $state = "VIC";
}
elseif((4000 <= $num && $num <= 4999) || (9000 <= $num && $num <= 9999)){
    $state = "QLD";
}
elseif((5000 <= $num && $num <= 5799) || (5800 <= $num && $num <= 5999)){
    $state = "SA";
}
elseif((6000 <= $num && $num <= 6797) || (6800 <= $num && $num <= 6999)){
    $state = "WA";
}
elseif((7000 <= $num && $num <= 7799) || (7800 <= $num && $num <= 7999)){
    $state = "TAS";
}
elseif((0800 <= $num && $num <= 0899) || (0900 <= $num && $num <= 0999)){
    $state = "NT";
}
else {
    $state = "Can not find this postcode record";
}

如果我echo $state希望看到 NT 但实际上我看到的是“找不到此邮政编码记录”。谁能告诉我问题是什么?

4

3 回答 3

1

0299是数字的八进制表示法,与十进制的299有很大不同。实际上9八进制是无效的,0299只有值2。试试echo 0299;,然后echo 0123;

如果您完全将邮政编码视为数字,则应从中去除前导 0,并且不要在同伴中使用前导 0:

$code = ltrim($_POST['postcode'], '0');

... $code <= 299 ...
于 2013-09-02T06:06:35.977 回答
0

使用 trim 然后 ltrim 作为零,第二个参数允许使用您想要修剪的任何字符。

<?php
$num = $_POST['postcode'];
$num = ltrim( trim($_POST['postcode'], ' ') , '0'); //trim SPACES or ZERO

如果你确定数字在左边,你可以使用 ltrim(

// Just to be sure, finally reconvert it to (int)
$num = (int) $num;
于 2013-09-02T06:23:39.850 回答
0

默认情况下, intval将解析您的字符串以 10 为基数,因此$num = intval("0888");会将字符串正确解析为 888。无需修剪。

但是,if 语句中的整数文字被解释为八进制数。删除那里的前导零:

[...] elseif((800 <= $num && $num <= 899)  [...]
于 2013-09-02T07:06:01.127 回答