2016-01-22 2 views
-1

Я использую следующий синтаксис Regex для проверки почтового индекса Великобритании в RSForm Pro:Лондон почтового индекса Regex проверка

^(([Гг] [Ii] [Rr] {0} 0 [аА ] {2}) | ((([а-пр-uwyzA-PR-UWYZ] [а-кк-Ya-HK-Y] [0-9] [0-9]) |? (([a- пр-uwyzA-PR-UWYZ] [0-9] [а-hjkstuwA-HJKSTUW]) | ([а-пр-uwyzA-PR-UWYZ] [а-кк-Ya-HK-Y] [0-9] [abehmnprv-yABEHMNPRV-Y]))) {0,} [0-9] [абд-hjlnp-UW-zABD-hJLNP-UW-Z] {2})) $

проверка работает отлично но мне нужно разрешить только Почтовые индексы внутри Лондона.

Вот почтовые индексы допускаются: WC, EC, E1-E20, N1-N22, NW1-NW11, SE1-SE28, SW1-SW20, W1-14, HA0-9, EN1-8

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

ответ

0

Это должно совпадать только с вашими совпадениями, если предположить, что они представляют собой отдельную строку - в противном случае вы можете использовать ограничители слов \b вместо якорей ^$. Я не думаю, что есть много возможных оптимизаций, просто очень straigthforward соответствия всех возможных код:

^(?:[WE]C|(?:E|SW)(?:[1-9]|1[0-9]|[12]0)|N(?:[1-9]|1[0-9]|2[0-2])|NW(?:[1-9]|1[01])|SE(?:[1-9]|1[0-9]|2[0-8])|W(?:[1-9]|1[0-4])|HA[0-9]|EN[1-8])$ 

Вот дем с положительными спичками и некоторыми отрицательными примерами:

https://regex101.com/r/cT6fQ5/2

Однако - после прочтения немного больше в теме, это может быть намного глубже, чем предоставляет ваш первоначальный пост. Я нашел этот сайт с лондонскими почтовыми индексами http://www.doogal.co.uk/london_postcodes.php и работал над решением, которое ограничивает первую 3 или 4 цифры, характерной для Лондона, а затем использует последнюю часть из ваших исходных почтовых индекса-регулярных выражений:

(?i)^((?:EC(?:[1234][AMNPRV]|[124]Y)|WC(?:[12][ABEHNR]|1[VX])|(?:E|SW)(?:[0-9]|1[0-9]|[12]0)|N(?:[1-9]|1[0-9]|2[0-2])|NW(?:[1-9]|1[01])|SE(?:[1-9]|1[0-9]|2[0-8])|W(?:[1-9]|1[0-4])|HA[0-9]|EN[1-8]|E1W) {0,}[0-9][ABD-HJLNP-UW-Z]{2})$ 

И снова демо: https://regex101.com/r/eD1gW3/3

+0

перестает соответствовать эти случаи: 'E1-E20, N1-N22, NW1-NW11, SE1-SE28, SW1-SW20, W1-14, HA0-9, EN1-8' –

+0

@noob Имхо' E1 -E20' означает 'E1',' E2', 'E3' ...' E20' и т. Д., Как вы можете видеть здесь: http://www.doogal.co.uk/london_postcodes.php –

+0

Oh! Я этого не знал. Я только придерживался спецификаций OP. Спасибо, что дали мне знать. –

Смежные вопросы