0

ユーザーが郵便番号を入力する単純な郵便番号フォームを作成しようとしています。郵便番号が存在する場合、ユーザーはリンクにリダイレクトされます。

だから、私はこの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 が含まれている場合は、Google にリダイレクトすることです。

「preg_match」を使用するか、配列の代わりにキーを使用しようとしましたが、運がありません..それを機能させる方法がわかりません。

UPDATE コードを置き換えた後、何らかの理由で、2文字の配列しか認識しません。例えばNG76PLと入力すると認識しないのでelseへ

4

1 に答える 1

1

これらの 2 文字の組み合わせのいずれかで開始する必要がありますか? 次に使用します。

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)ますが、多くのオプションがある場合、それは良い解決策ではないと思います。

于 2013-11-02T19:59:35.487 に答える