Ой! Это сложная проблема. К сожалению, в мире нет регулярных выражений, которые могли бы вас спасти. Единственный реальный способ сделать это - использовать какой-либо сервис проверки адреса. Да, Google Карты и различные альтернативы обычно могут сказать вам, выглядит ли адрес реальным, и, возможно, даже отобразить его на карте, но они не могут сказать вам, является ли адрес реальным и могут, например, получать почту. 1001 *
Я полагаю, что главный бизнес (а не технический) вопрос во всем этом: зачем вы собираете адрес в первую очередь? Если вы собираете данные, было бы неплохо знать, что это правильно? Например, вместо того, чтобы собирать номер кредитной карты и предполагать, что он может быть правильным, потому что он проходит контрольную сумму мода 10, вы не хотели бы знать, действительно ли кредитная карта хороша? Или как насчет номера телефона или электронной почты? Конечно, это может проходить регулярное выражение, но если телефон / электронная почта не привязаны к человеку, то какая польза от этого?
То же самое относится и к адресам. Адрес, который может быть реальным, так же плох, как и номер кредитной карты, который проходит проверку целостности, но не является выданным номером кредитной карты. Единственный способ убедиться, что адрес является доставляемым, - это использовать стороннюю веб-службу проверки адреса.
Существует целый ряд провайдеров, которые предлагают веб-сервисы, которые могут быть связаны через Javascript. В интересах полного раскрытия я являюсь основателем SmartyStreets . Мы предлагаем основанный на REST веб-сервис проверки адреса под названием LiveAddress , к которому можно получить доступ через Javascript. Он может даже принимать вызовы JSONP для обхода междоменных запросов.