PHP部分邮政编码匹配

时间:2013-11-02 19:55:22

标签: php search match partial postal-code

我正在尝试创建一个简单的邮政编码表单,用户输入邮政编码,如果邮政编码存在,用户将被重定向到链接。

所以,我有这个HTML格式:

<form method="get" action="index.php">
    <input type="text" class="form-control input-lg" name="postcode" id="postcode" placeholder="Postcode">
    <span class="input-group-btn">
    <input class="btn btn-default btn-lg find" name="did_submit" id="submithome" type="submit" value="Find My Matchmaker" class="searchbutton">
    </span>
</form>

PHP脚本:

<?php
  if(isset($_GET['postcode'])){
      $valid_prefixes = array(
          2 => array('NH', 'AQ'),
          3 => array('NZ2', 'GT5'),
          4 => array('NG89', 'NG76')
      );

  foreach($valid_prefixes as $length => $prefixes) {
      if (in_array(substr($_GET['postcode'], 0, $length), $prefixes)) {
          header("Location: http://www.google.com/");
      } else {
          echo "<script> $('#myModal').modal('show') </script>";
      }
      exit;
  }}
?>

因此,如果输入的邮政编码是CV或NG,则脚本会将用户重定向到Google,如果没有,则会启动模式。

现在的问题。显然,用户会输入CV12DB(完整的邮政编码),他们会得到模态,好像邮政编码不存在一样。 我想用PHP脚本做的是搜索用户输入的内容,如果他的邮政编码包含CV或NG或SH,则将他重定向到谷歌。

我尝试使用“preg_match”或使用键而不是数组,但没有运气.. 我似乎无法弄清楚如何使它发挥作用。

更新 更换代码后,由于某种原因,它只识别两个字母的数组。 例如,如果输入NG76PL,它将无法识别它,因此它将转到“else”

1 个答案:

答案 0 :(得分:1)

它应该从这两个字母组合中的一个开始吗?然后使用:

if (in_array(substr($_GET['postcode'], 0, 2), $validatepostcode) {
    // redirect
}

如果您有多个长度前缀,则可以使用:

for ($i = $min_prefix_length; $i <= $max_prefix_length; $i++) {
    if (in_array(substr($_GET['postcode'], 0, $i), $validatepostcode) {
        // redirect
    }
}

或(效率更高):

$valid_prefixes = array(
    2 => array('NH', 'AQ'),
    3 => array('NZ2', 'GT5'),
);
foreach($valid_prefixes as $length => $prefixes) {
    if (in_array(substr($_GET['postcode'], 0, $length), $prefixes) {
        // redirect
    }
}

您可以使用^(NH|AQ|NZ2|GT5)之类的正则表达式,但如果您有很多选择,我认为这不是一个好的解决方案。