Regex для проверки почтовых индексов Великобритании - PullRequest
0 голосов
/ 13 октября 2009

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

(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})

Если я правильно понимаю это регулярное выражение, разрешается использовать следующие почтовые индексы:

GIR 0AA

Или тогда мы можем составить первую часть почтового индекса следующим образом:

Либо

ANN (where A is any letter except for QVX and N is any number)

или

ABNN (where A is any letter except for QVX, B any letter except for IJZ and N is any number)

или

ANC (where A is any letter except for QVX, N is any number and C is any letter from A-H and then J, K, S, T, U, W)

или

ABND (where A is any letter except for QVX, B any letter except for IJZ, N is any number and D can be any of ABEHMNPRVWXY)

Вторая часть почтового индекса

NEE (where N is any number and E is any letter except for any of CIKMOV)

Это мое понимание вышеприведенного регулярного выражения.

Что я не могу понять, так это почему aaa1 1aa or aaa11 1aa

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 13 октября 2009

Вы не привязали его к началу и концу строки (^ и $)

^((GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2}))$
3 голосов
/ 13 октября 2009

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

[A-Z-[QVX]]

исключает символы QVX, как вы, кажется, хотите. В большинстве регулярных выражений это будет класс символов, допускающий A-Z-[, за которым следует буквальная закрывающая квадратная скобка. Чтобы исключить QVX, вы должны сказать:

[A-PR-UWYZ]

В любом случае, обычно не стоит «проверять» почтовые индексы полностью; почтовые индексы - более хитрый зверь, чем многие думают, особенно если вы хотите разрешить исторические почтовые индексы и странности, такие как почтовые индексы BFPO (которые вы в данный момент, похоже, игнорируете). Вам также не нужно обновлять свой код, если и когда почтовое отделение добавляет новые коды.

Лучше всего использовать простую поверхностную проверку для явно неправильного / пропущенного ввода; На самом деле это плохая вещь - отказать потенциальному клиенту, потому что вы считаете его адрес «недействительным».

0 голосов
/ 24 июля 2013

Используйте это регулярное выражение

^ ?(([BEGLMNSWbeglmnsw][0-9][0-9]?)|(([A-PR-UWYZa-pr-uwyz][A-HK-Ya-hk-y][0-9][0-9]?)|(([ENWenw][0-9][A-HJKSTUWa-hjkstuw])|([ENWenw][A-HK-Ya-hk-y][0-9][ABEHMNPRVWXYabehmnprvwxy])))) ?[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...