24 return !empty($zip) && $zip !=
'*' ?
self::parseZip($zip) : ($state ? [$state] : [
'*']);
35 if (strpos($zip,
'-') ===
false) {
57 if (!preg_match(
"/^(.+)-(.+)$/", $zipRange, $zipParts)) {
61 if ($zipParts[1] == $zipParts[2]) {
62 return [$zipParts[1]];
65 if ($zipParts[1] > $zipParts[2]) {
66 list($zipParts[2], $zipParts[1]) = [$zipParts[1], $zipParts[2]];
69 $from = str_split($zipParts[1]);
70 $to = str_split($zipParts[2]);
76 $startZip .= $from[
$pos];
86 if (min(array_slice($to, $diffPosition)) == 9 && max(array_slice($from, $diffPosition)) == 0) {
88 return [$startZip .
'*'];
91 $start = $from[$diffPosition];
92 $finish = $to[$diffPosition];
93 if ($diffPosition < $zipLength - 1) {
97 $end = $diffPosition < $zipLength - 1 ?
'*' :
'';
98 for ($digit =
$start; $digit <= $finish; $digit++) {
99 $zipPattern[] = $startZip . $digit . $end;
103 if ($diffPosition == $zipLength - 1) {
107 $nextAsteriskFrom =
true;
108 $nextAsteriskTo =
true;
109 for (
$pos = $zipLength - 1;
$pos > $diffPosition;
$pos--) {
111 if ($from[
$pos] == 0 && $nextAsteriskFrom) {
112 $nextAsteriskFrom =
true;
115 for ($k = $diffPosition; $k <
$pos; $k++) {
116 $subZip .= $from[$k];
118 $delta = $nextAsteriskFrom ? 0 : 1;
119 $end =
$pos < $zipLength - 1 ?
'*' :
'';
120 for (
$i = $from[
$pos] + $delta;
$i <= 9;
$i++) {
121 $zipPattern[] = $startZip . $subZip .
$i . $end;
123 $nextAsteriskFrom =
false;
127 if ($to[
$pos] == 9 && $nextAsteriskTo) {
128 $nextAsteriskTo =
true;
131 for ($k = $diffPosition; $k <
$pos; $k++) {
134 $delta = $nextAsteriskTo ? 0 : 1;
135 $end =
$pos < $zipLength - 1 ?
'*' :
'';
136 for (
$i = 0;
$i <= $to[
$pos] - $delta;
$i++) {
137 $zipPattern[] = $startZip . $subZip .
$i . $end;
139 $nextAsteriskTo =
false;
143 if ($nextAsteriskFrom) {
144 $zipPattern[] = $startZip . $from[$diffPosition] .
'*';
146 if ($nextAsteriskTo) {
147 $zipPattern[] = $startZip . $to[$diffPosition] .
'*';
static zipRangeToZipPattern($zipRange)
static parseRegions($state, $zip)