PHP получить первую часть почтового индекса - PullRequest
0 голосов
/ 12 июня 2011

Мне нужно извлечь первую часть почтового индекса для расчета поиска с использованием базы данных. Есть идеи?! Мне нужно это реализовать поисковый модуль на сайте, который ищет некоторую соответствующую информацию в соответствии с почтовым индексом. Но база данных, которую я имею для почтового индекса, у нее нет второй части почтового индекса, есть только первая часть. Это для почтового индекса Великобритании. Итак, есть идеи?!

1 Ответ

9 голосов
/ 12 июня 2011

Это не будет охватывать 100% всех возможных почтовых индексов Великобритании, но будет примерно 99,999% или более:)

/**
 * @param string $postcode UK Postcode
 * @return string
 */
function getUKPostcodeFirstPart($postcode)
{
    // validate input parameters
    $postcode = strtoupper($postcode);

    // UK mainland / Channel Islands (simplified version, since we do not require to validate it)
    if (preg_match('/^[A-Z]([A-Z]?\d(\d|[A-Z])?|\d[A-Z]?)\s*?\d[A-Z][A-Z]$/i', $postcode))
        return preg_replace('/^([A-Z]([A-Z]?\d(\d|[A-Z])?|\d[A-Z]?))\s*?(\d[A-Z][A-Z])$/i', '$1', $postcode);
    // British Forces
    if (preg_match('/^(BFPO)\s*?(\d{1,4})$/i', $postcode))
        return preg_replace('/^(BFPO)\s*?(\d{1,4})$/i', '$1', $postcode);
    // overseas territories
    if (preg_match('/^(ASCN|BBND|BIQQ|FIQQ|PCRN|SIQQ|STHL|TDCU|TKCA)\s*?(1ZZ)$/i', $postcode))
        return preg_replace('/^([A-Z]{4})\s*?(1ZZ)$/i', '$1', $postcode);

    // well ... even other form of postcode... return it as is
    return $postcode;
}

Данные испытаний:

echo 'TW135BQ -> ', getUKPostcodeFirstPart('TW135BQ'), "\n";
echo 'gir0aa -> ', getUKPostcodeFirstPart('gir0aa'), "\n";
echo 'RG5 3SQ -> ', getUKPostcodeFirstPart('RG5 3SQ'), "\n";
echo 'AB51 0GQ -> ', getUKPostcodeFirstPart('AB51 0GQ'), "\n";
echo 'YO104EA -> ', getUKPostcodeFirstPart('YO104EA'), "\n";
echo 'SE154NS -> ', getUKPostcodeFirstPart('SE154NS'), "\n";
echo 'W1B4BD -> ', getUKPostcodeFirstPart('W1B4BD'), "\n";

Результаты:

TW135BQ -> TW13
gir0aa -> GIR0AA
RG5 3SQ -> RG5
AB51 0GQ -> AB51
YO104EA -> YO10
SE154NS -> SE15
W1B4BD -> W1B

Обратите внимание: Вы несете ответственность за предоставление действующего почтового индекса.

РЕДАКТИРОВАТЬ: упс, это такне распространяется GIR 0AA, извините

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...