PHP 部分邮编匹配

Posted

技术标签:

【中文标题】PHP 部分邮编匹配【英文标题】:PHP partial postcode match 【发布时间】:2013-11-02 19:55:21 【问题描述】:

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

所以,我有这个 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”

【问题讨论】:

您更正的代码(实际上是基于 Peter van der Wal 的回答,而不是您的原始问题)的 exit; 放置不正确,这意味着它将在第一个循环后退出 PHP。跨度> 非常感谢,现在可以使用了。我真的很感激 【参考方案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) 这样的正则表达式,但如果您有很多选择,我认为这不是一个好的解决方案。

【讨论】:

好吧,如果我只有两个字母的组合,这可行,但我会有 2 个字母、3 个字母和 4 个字母的组合。(例如 NG、NG3、NG90) @emisfera 如果您对此特定解决方案有疑问,您应该在此处对其进行评论,而不是编辑问题以使其看起来像是您的原始代码。 抱歉,我是新手,不知道具体是如何工作的。 从foreach-line开始,试着向自己解释每一行的作用,我相信你会看到的,如果没有回复我会指给你看跨度>

以上是关于PHP 部分邮编匹配的主要内容,如果未能解决你的问题,请参考以下文章

es深入搜索之部分匹配

在 php 数组中搜索部分字符串匹配 [重复]

php 不区分大小写的array_search(),部分匹配

正则表达式匹配身份证 电话号码 邮箱 住宅电话 邮编等

邮编搜索并返回链接

Java获取个个地区邮编(附源码抓取的数据)