Как мне разобрать адрес в свободном формате для сохранения в базе данных
У меня есть текстовая область, которая позволяет пользователю вводить адрес в произвольном формате, как мне разобрать адрес, введенный пользователем в адрес1, адрес2, город, штат, почтовый индекс и страну, и сохранить его в БД?
4 ответа
Вам здесь очень больно.
Адреса ДЕЙСТВИТЕЛЬНО ПЛОХО различаются между странами, и даже в пределах одной страны синтаксический анализ подвержен ошибкам. Он был там и возглавлял команду из 2 человек, которые месяцами пытались разобрать все НЕМЕЦКИЕ адреса. Много глупых маленьких специальностей слева и справа.
Печальные новости - я не думаю, что это можно сделать надежно. Не в том случае, если запись является свободной формой, а не так, как люди вводят адреса различными способами.
Пойдите с приличной формой входа, не с свободным вводом текста.
Не используйте вместо этого форму ввода данных в отдельном поле.
Предполагая, что вы не / не можете / не будете прислушиваться к этому совету, вы должны сделать некоторые предположения о том, как он был введен. Вы можете быть немного умнее, начав с конца и продолжая свой путь.
То есть:
- Разделить на новые строки.
- 1-я линия - это номер дома и улица.
- Последняя строка может быть почтовый индекс / почтовый индекс.
- Последней линией может быть город.
- Строки между первым и последним, кроме одного - это адресная строка 2, 3 и т. Д.
ВАЖНЫЙ
Форматы адресов сильно различаются в разных странах. Если бы я был вами, и у вас есть возможности для этого, я бы по крайней мере предоставил раскрывающийся список стран, чтобы вы могли применять различные правила синтаксического анализа для каждой страны.
Вы не можете предсказать, как пользователь будет вводить адрес, например, некоторые предпочитают использовать новые строки, другие предпочитают использовать запятые.
Чтобы избавиться от хлопот, я бы просто имел отдельные поля для каждого отдельного элемента или просто сохранял адрес как целую строку.
Я не думаю, что вы сможете правильно разобрать его в случае свободного формата. Вы можете использовать MaskedEdit для этих целей. Другой способ - потребовать от пользователя ввода информации в определенном порядке.