まず、ユーザーから郵便番号の入力を受け付ける場合、想定されるフォーマットは以下の2通りとなる。

// ハイフンあり
xxx-xxxx

// ハイフンなし
xxxxxxx

ハイフンあり・なしでそれぞれ桁数が変わってくるが、今回はこのどちらにも対応した、郵便番号を3桁・4桁の二つのフィールドに分けるコードを紹介する。

substr関数を使う

substr関数を使う方法が最も簡単だろう。

function splitZip($zip) {
  return array(substr($zip, 0, 3), substr($zip, -4));
}

上記で用意した関数は、ハイフンの有無に関わらず、引数に渡した郵便番号を3桁・4桁に分割して結果を配列として返す関数だ。

substr関数で先頭3桁、そして後ろから4桁を抽出し、配列として格納している。

動作確認をしてみる。

var_dump(splitZip('000-1111'));
var_dump(splitZip('0001111'));

// 以下出力結果
array(2) {
  [0]=>
  string(3) "000"
  [1]=>
  string(4) "1111"
}
array(2) {
  [0]=>
  string(3) "000"
  [1]=>
  string(4) "1111"
}

上記のとおり、いずれも同じ結果を得ることができる。