Согласно an archived page I found, спецификация является:
Pattern w/o space RLE General
AN NAA ANNAA A1 N2 A2 | A{1,2} N{2,3} A2
ANN NAA ANNNAA A1 N3 A2 |
AAN NAA AANNAA A2 N2 A2 |
AANN NAA AANNNAA A2 N3 A2 |
ANA NAA ANANAA A1 N1 A1 N1 A2 | A{1,2} N1 A1 N1 A2
AANA NAA AANANAA A2 N1 A1 N1 A2 |
GIR 0AA We are British and for every rule there must be an
equal and opposite exception.
Может быть, это слишком много хлопот, чтобы беспокоиться в проверке страницы. Помните, что вам придется поддерживать его, если когда-либо произойдут изменения. Рассмотрим минимальную проверку, например, ^[A-Z].+[0-9].+[A-Z]$
. Не будьте «героем» и не составите код.
Если вы действительно хотите, чтобы проверить его против этой спецификации, общие правила (после зачистки пробельного) являются:
^([A-Z]{1,2})([0-9]{2,3})([A-Z]{2})$/i
^([A-Z]{1,2})([0-9])([A-Z])([0-9])([A-Z]{2})$/i
^GIR0AA$/i
Как @Stefan отметил:/я для прецедентной нечувствительности.
Как только вы это сделаете, вы можете сопоставить группы (следовательно, фигурные скобки) и проверить, соответствуют ли буквы ограниченным диапазонам в документе. На этом этапе вы даже можете сохранить список разрешенных одно- и двухбуквенных кодов для почтовых индексов.
Общее правило для разделения Инкода (фрагмент перед пространством) из Outcode (фрагмент после пробела), по-видимому, заключается в том, что Исходный код начинается с последнего номера (даже для GIR).
Честно говоря, я перестану беспокоиться после базовой проверки.Если стоит проверить более полную спецификацию, то, вероятно, стоит проверить, что область почтового индекса существует, и если это стоит того, вы можете подключиться к реальной службе, которая извлекает адрес из почтового индекса. Эти службы с радостью сообщают вам, что почтовый индекс не существует, что является более надежной и поддерживаемой проверкой, чем вы когда-либо хотели писать.
[Edit: есть другая спецификация on Wikipedia конечно]
Почему вы хотите проверить почтовые индексы на стороне клиента? Я бы предпочел сделать строгую проверку на стороне сервера, так как злоумышленник может вставлять неверные данные независимо от ваших клиентских проверок. – jsalonen
@jsalonen, это не «вредоносный ввод», конечно, проверка на стороне сервера является обязательной! Но вы также хотите показать своих пользователей по размеру клиента «Извините меня, сэр, я думаю, что вы допустили ошибку там, хотите ли вы ее исправить» – Adi
Если вы проверяете почтовые индексы на стороне сервера, вы можете повторно использовать этот код в клиентских проверках: 1) отправлять данные на сервер для проверки, 2) если проверка не завершена (на стороне сервера), вернитесь к форме со специальным сообщением об ошибке. Таким образом, вам не нужно будет поддерживать два отдельных кода проверки почтовых индексов! – jsalonen