У меня есть приложение, которое ищет базу данных адресов.Посетитель страницы вводит свой адрес, и приложение сообщает им, подключены ли они.
Соответствующие части базы данных, в которой содержится информация, по которой они должны искать:
streetname "Stora gatan"
streetnumber "34"
streetletter "B"
address "Stora gatan 34B"
Эта база данных предоставлена моим клиентом и, как вы можете видеть, аккуратно отформатирована.Подавляющее большинство данных, которые ищет посетитель:
"Stora gatan"
"Stora gatan 34"
"Stora gatan 34b"
"Stora gatan 34 b"
Это форматы only , которые мне интересны в данный момент. Это шведское приложение, и вот какадреса отформатированы / набраны в Швеции.Любые дикие версии вышеупомянутых (скажем, если пользователь должен искать «34 Storgatan B», ничего не будет соответствовать, и это было бы вполне нормально.
Также крайне нежелательно, чтобы в форме заявки было три поля поиска).вместо одного, поэтому данные в одной строке.
Теперь, как вы можете видеть, один из приведенных выше условий поиска потерпит неудачу, несмотря на то, что он является допустимым способом ввода адреса.с пробелом между числом и буквой адреса.
Итак, я написал это регулярное выражение, чтобы перехватить все входящие запросы и, надеюсь, поменять их на правильные:
if (preg_match("/^(.*?)\s*(\d*?)\s*([A-Za-z]*?)$/", $address, $m)){
$streetname = uc_words($m[1]);
$streetnumber = trim($m[2]);
$streetletter = strtoupper($m[3]);
$search = trim($streetname . SPACE . $streetnumber . $streetletter);
}
К сожалению, это не такЭто действительно работает, как я и надеялся. Полученный $ m будет выглядеть так для каждого из моих примеров выше:
Неправильно:
Array
(
[0] => Stora gatan
[1] => Stora
[2] =>
[3] => gatan
)
Правильно:
Array
(
[0] => Stora gatan 34
[1] => Stora gatan
[2] => 34
[3] =>
)
Правильно:
Array
(
[0] => Stora gatan 34b
[1] => Stora gatan
[2] => 34
[3] => b
)
У вас, ребята, есть какие-нибудь указатели на всеобъемлющее выражение, или вы бы предложили сделать еще несколько, если / еще перехватывает перед регулярным выражением? Любой ввод приветствуется.
Спасибо!