Адрес регулярного выражения PHP regexp

Я пытаюсь понять, что было бы хорошим способом проверить адрес в США, я знаю, что может быть неправильный способ сделать это, но я иду по основному пути: #, Название улицы, город, штат и почтовый индекс.

Любые идеи будут оценены. Благодаря

Ответ 1

Не пытайтесь. У кого-то, скорее всего, есть почтовый ящик, номер квартиры и т.д., И они будут очень рассержены. Даже "нормальное" название улицы может иметь номера, такие как 125-я улица (и многие другие) в Нью-Йорке. Даже в пригороде могут быть пронумерованные улицы.

И названия городов могут иметь пробелы.

Ответ 2

Попросите пользователя ввести части адреса в отдельных полях (название улицы, город, штат и почтовый индекс) и использовать любую проверку, подходящую для такого поля. Это общая практика.

В качестве альтернативы, если вам нужно простейшее из регулярных выражений, которое соответствует четырем строкам, разделенным тремя запятыми, попробуйте следующее:

/^(.+),([^,]+),([^,]+),([^,]+)$/

Если все будет соответствовать, вы можете использовать дополнительное сопоставление образцов для проверки компонентов адреса. Невозможно проверить действительность уличного адреса, но вы можете отправлять текстовые коды и коды состояний.

Ответ 3

Существует слишком много вариантов адреса, чтобы иметь возможность делать это с помощью регулярных выражений. Вам лучше найти веб-сервис, который может проверять адреса. У USPS есть один - вам нужно будет запросить разрешение на его использование.

Ответ 4

Я согласен с salman: пользователь вводит данные в разных полях (один для zip, один для состояния, один для города и один для имени #/улицы. Используйте другое регулярное выражение для каждого поля. /name лучшее выражение, которое я придумал, было

/^[0-9]{1,7} [a-zA-z0-9]{2,35}\a*/

Ответ 5

Это не пуленепробиваемое решение, но предполагается, что адрес начинается с числового номера улицы и заканчивается почтовым индексом, который может быть либо 5, либо 9.

([0-9] {1,} [\ s\S] *? [0-9] {5} (?: - [0-9] {4})?)

Как я уже сказал, это не пуленепробиваемый, но я использовал его с маргинальным успехом в прошлом.

Ответ 6

Здесь, в Новой Зеландии, вы можете лицензировать официальный список почтовых адресов из New Zealand Post - предоставить вам данные, необходимые для заполнения таблицу со всеми действительными почтовыми адресами в Новой Зеландии.

Утверждение против этого списка намного проще, чем попытка придумать Regex - и точность намного выше, так как вы заканчиваете тремя случаями:

  • Адрес, который вы проверяете, находится в списке, поэтому вы знаете, что это реальный адрес.
  • Адрес, который вы проверяете, очень похож на один в списке, поэтому вы знаете, что это, вероятно, настоящий адрес.
  • Адрес, который вы проверяете, не похож в списке, поэтому он может быть или не быть реальным.

Лучшее, что вы получите с помощью RegEx,

  • Адрес, который вы проверяете, соответствует регулярному выражению, поэтому он может быть реальным адресом
  • Адрес, который вы проверяете, не соответствует регулярному выражению, поэтому он может не быть реальным адресом

Необходимость знать почтовые адреса - довольно распространенная ситуация для многих компаний, поэтому я считаю, что лицензирование списка будет возможно в большинстве областей.

Единственный липкий бит будет ценой.

Ответ 7

Используйте программное обеспечение CASS, подобное этому на http://semaphorecorp.com/cgi/zp4.html

Стандартный формат документируется в публикации 28 как usps.com

Если вы проверяете окончательное обнаружение обмана, прочитайте http://semaphorecorp.com/mpdd/mpdd.html