-2

我有一个邮政编码区域列表(仅限左侧),如下所示:

IV1-28,IV30-32,IV36,IV40-49,IV52-56,IV63,KW1-3,KW5-14,PA21-38,PH1-26,PH30-41,PH49-50,LD1-99,SY16-20,SY23-25

我的输入是英国邮政编码,例如。IV21

我需要一个 PHP 函数来检查输入的邮政编码(例如 IV21)是否在列表中。

这很简单,但该列表采用 IV1-28 的形式,而不是诸如IV1,IV2,IV3,IV4,IV5,IV6...IV26,IV27,IV28etc之类的“正常”列表。

非常感谢您的帮助。提前致谢。

4

3 回答 3

1

循环遍历代码数组并将它们拆分为数字,然后检查该数字是否在范围内

$list = array("IV1-28","AB1-10");
$found = false;
$input = "AB10";
$inputCode = substr($input,0,2);
$inputNumber = substr($input,2);
foreach ($list as $l)
{
    $lCode = substr($l,0,2);
    $lNumber = substr($l,2);
    $listNumbers = explode("-",$lNumber);
    if (($inputNumber >= $listNumbers[0]) && ($inputNumber <= $listNumbers[1]) && ($inputCode==$lCode))
    {
        $found = true;
        break;
        }           
}

var_dump($found);
于 2012-05-20T17:45:25.053 回答
0

http://php.net/manual/en/function.explode.php(将列表拆分为仅左侧),将左侧添加到数组中,然后使用http://php.net/manual /en/function.in-array.php - 应该让你接近你需要的地方

于 2012-05-20T17:25:14.443 回答
0

使用 strpos 函数。如果找到则返回 int,否则返回 false。请注意,即使找到了 IV11,匹配的 IV1 也会为真。所以使用以下脚本

$code="IV21";
$list="IV1-..........etc";
if(strpos($list,$code."-") || strpos($list,$code.",") { 
//true
}
else {
//false 
}

"-" 和 "," 是为了确保字符串结束,这样如果我们搜索 IV1,IV11 就不会给出 true

于 2012-05-20T18:30:40.267 回答