2013-11-02 77 views
0

我想創建一個簡單的郵政編碼表單,其中用戶輸入郵政編碼,如果郵政編碼存在,用戶將重定向到鏈接。PHP部分郵編匹配

所以,我有這樣的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,該腳本將用戶重定向到谷歌如果不是,將會啓動一個模式。

現在的問題。顯然,用戶會輸入CV12DB(完整的郵編),他們會得到模態,就好像郵編不存在一樣。 我正在嘗試使用PHP腳本來搜索用戶輸入的內容,如果他的郵編包含簡歷或NG或SH,則將其重定向到Google。

我已經嘗試使用「preg_match」或使用鍵而不是陣列,但沒有運氣.. 我似乎無法弄清楚如何使其工作。

UPDATE 替換代碼後,出於某種原因,它只識別雙字母數組。 例如,如果輸入NG76PL,它不會識別它,因此它會轉到「其他」

+0

您的更正的代碼(實際上是基於Peter van der Wal的答案,而不是您原來的問題)有一個錯誤放置的'退出;',這意味着它將在第一次循環後退出PHP。 – IMSoP

+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)但我不如果你有很多選擇,那麼認爲這將是一個很好的解決方案。

+0

嗯,如果我只有兩個字母的組合,但是我會有2個字母,3個字母和4個字母組合(如NG,NG3,NG90) –

+0

我已更新我的答案是,你在找什麼? –

+0

我編輯了我的帖子,請看看它。 –