Исправление проверки правильности регулярного адреса - PullRequest
1 голос
/ 16 марта 2019

После многих часов поиска я нашел регулярное выражение, которое проверяет адрес улицы (только улица без города / штата / почтового индекса). Это только для использования в США. Трудно было найти что-нибудь, что соответствовало бы моим потребностям или работало бы с нумерованными улицами.

Тот, который я использую, прекрасно работает, за исключением случаев, таких как

12345 5th ave ne
4367 103rd North
1234 Main St     <- currently works but needs to work after fix
12345 Apple Way  <- currently works but needs to work after fix

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

Проблема в том, что он хочет, чтобы Ave (или st / etc) в конце, и мне нужно, чтобы все комбинации север / юг / запад / восток в виде одинарных или двойных комбинаций также были в конце (например, SouthWest, NE, северо-восток).

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

Для моего использования юнит № / Apt # / etc не будет использоваться строго для базового адреса улицы.

Это то, что у меня сейчас есть:

\d+[ ](?:[A-Za-z0-9.-]+[ ]?)+(?:Avenue|Lane|Road|Boulevard|Drive|Street|Way|Ave|Dr|Rd|Blvd|Ln|St|Wy|avenue|lane|road|boulevard|drive|street|way|ave|dr|rd|blvd|ln|st|wy)\.?

Я ценю любую помощь.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

В своем выражении регулярного выражения вы указываете 28 возможных суффиксов улиц (St, Ave и т. Д.).USPS распознает 190 из них, плюс еще около 300 их альтернативных вариантов написания (например, St и Street).

Кроме того, в реальных данных адреса часто не содержат суффиксов улиц, где «123 Main» означает «123 Main St».RegEx не скажет вам, если суффикс "St" отсутствует или не должен быть там, как в "123 Embarcadero".

Другими словами, RegEx не работает надежно для проверки почтового адреса.

Компания, на которую я работаю, создает YAddress , инструмент, специально созданный для проверки адреса.Он заботится обо всех вышеперечисленных проблемах, плюс еще сотни.

0 голосов
/ 16 марта 2019

Попробуйте это:

/\d+\s[\w]+\s(.*)/i

Вы можете получить улицу, позвонив в групповой матч 1.

DEMO

UPDATE

Если вы хотите получить всю «главную улицу» и «яблочный путь», вы можете сделать это, вызвав групповое совпадение 2, используя это регулярное выражение:

\d+\s(\d*[a-z]+)?\s?(.*)

DEMO

...