PHP регулярное выражение адреса США
Я пытаюсь выяснить, что было бы хорошим способом проверки адреса в США, я знаю, что, возможно, нет правильного способа сделать это, но я иду основным путем: #, название улицы, город, штат и почтовый индекс.
Любые идеи будут оценены по достоинству. Спасибо
6 ответов
Не пытайся У кого-то, вероятно, будет почтовый ящик, или номер квартиры и т. Д., И он будет очень зол на вас. Даже у "нормального" названия улицы могут быть номера, например 125-я улица (и многие другие) в Нью-Йорке. Даже в пригороде могут быть пронумерованные улицы.
И названия городов могут иметь пробелы.
Попросите пользователя ввести части адреса в отдельных полях (название улицы, город, штат и почтовый индекс) и использовать любую проверку, подходящую для такого поля. Это общая практика.
В качестве альтернативы, если вы хотите простое регулярное выражение, которое соответствует четырем строкам, разделенным тремя запятыми, попробуйте это:
/^(.+),([^,]+),([^,]+),([^,]+)$/
Если вещи совпадают, вы можете использовать дополнительное сопоставление с образцом для проверки компонентов адреса. Невозможно проверить действительность адреса улицы, но вы можете набрать текстовые почтовые индексы и коды штатов.
Я согласен с salman: пользователь должен вводить данные в разных полях (один для zip, один для штата, один для города и один для #/ названия улицы. Используйте разные регулярные выражения для каждого поля. Для улицы #/ название лучшее выражение, которое я придумал, было
/^[0-9]{1,7} [a-zA-z0-9]{2,35}\a*/
Существует слишком много вариантов адресов, чтобы можно было сделать это с помощью регулярных выражений. Вам лучше найти веб-сервис, который может проверять адреса. У USPS есть один - вам нужно будет запросить разрешение на его использование.
Здесь, в Новой Зеландии, вы можете лицензировать официальный список почтовых адресов Новой Зеландии, предоставляя вам данные, необходимые для заполнения таблицы каждым действительным почтовым адресом в Новой Зеландии.
Проверка по этому списку намного проще, чем пытаться придумать Regex - и точность также намного выше, так как в итоге вы получите три случая:
- Проверяемый адрес находится в списке, поэтому вы знаете, что это реальный адрес
- Адрес, который вы проверяете, очень похож на адрес в списке, так что вы, вероятно, знаете, что это реальный адрес
- Адрес, который вы проверяете, не похож в списке, поэтому он может быть или не быть реальным.
Лучшее, что вы получите с RegEx, это
- Адрес, который вы проверяете, соответствует регулярному выражению, поэтому это может быть реальный адрес
- Проверяемый адрес не соответствует регулярному выражению, поэтому он может быть не реальным
Необходимость знать почтовые адреса является довольно распространенной ситуацией для многих компаний, поэтому я считаю, что лицензирование списка будет возможно в большинстве областей.
Единственный недостаток будет ценообразование.
Это не пуленепробиваемое решение, но предполагается, что адрес начинается с цифры для номера улицы и заканчивается почтовым индексом, который может быть 5 или 9 цифрами.
([0-9] {1,} [\ s \ S] *? [0-9] {5} (?: - [0-9] {4})?)
Как я уже сказал, это не пуленепробиваемый, но я использовал его с незначительным успехом в прошлом.