регулярное выражение для извлечения части почтового индекса Великобритании из адресной строки - PullRequest
0 голосов
/ 28 декабря 2011

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

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

это делается через начальную часть строки почтового индекса. например, n17 9ht, мой интерес к n17

это все справедливо, но я получаю разные результаты в chrome и IE9, Firefox намного лучше и возвращает строку postalCode автоматически.

  • хром: 2 Castlebar Park, London, Greater London W5 1BX, UK
  • ie9: 3-6 Mt Ave, London Borough of Ealing, London W5, UK

, хотя ни один из них не является моим адресом, W5 верен.

вопрос в том, как мне извлечь только W5 из двух возможных мне строк?

Очевидно, что строка разделяется на ,, поэтому я смотрю на получение W5 (или любой возможной ведущей части почтового индекса в Великобритании) из строки, похожей на:

  • Greater London W5 1BX
  • London W5

между двумя частями почтового индекса всегда будет пробел (если указан 2-й).

Меня не волнуют случаи BFPO / GIR, так что это в значительной степени просто часть 1, которая может быть такой простой, как n1 или ec3a - поэтому, как я понимаю, логика должна быть:

  1. извлечь полный или частичный почтовый индекс.
  2. принять часть 1 (или единственную часть) и передать ее.

любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

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

([A-Z]?\d(:? \d[A-Z]{2})?|[A-Z]\d{2}(:? \d[A-Z]{2})?|[A-Z]{2}\d(:? \d[A-Z]{2})?|[A-Z]{2}\d{2}(:? \d[A-Z]{2})?|[A-Z]\d[A-Z](:? \d[A-Z]{2})?|[A-Z]{2}\d[A-Z](:? \d[A-Z]{2})?),\s*UK$

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

1 голос
/ 28 декабря 2011

Я не знаком с британскими почтовыми индексами, но вы, кажется, говорите, что, уже удалив другие части адреса, вы сузили адрес до:

[Some words] [several-character code] [optional three-character code]

И вам нужен двухсимвольный код. Если это правильно, то, возможно, регулярное выражение примерно так:

/\s([^\s]{2,4})(?:\s...)?$/

Тогда требуемый бит будет возвращен .match():

var addressPart = "Greater London W5 1BX",

alert(addressPart.match(/\s([^\s]{2,4})(?:\s...)?$/)[1]); // "W5"

(Конечно, вы можете на самом деле протестировать возврат из .match(), чтобы убедиться, что он работает, но , если сработал, то бит, который вы хотите, будет вторым элементом массива совпадений.)

Хитрая демонстрация: http://jsfiddle.net/HjD7w/1/

РЕДАКТИРОВАТЬ: Я подозреваю, что это не совсем работает, потому что в некоторых случаях последнее слово названия города может быть ошибочно принято за первую часть почтового индекса, но если есть фиксированные правила о том, как вписываются буквы и цифры почтовый индекс вы можете это исправить. (Хотя я не знаю правил.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...