Регулярное выражение почтового индекса Javascript в Великобритании
Автор вопроса: Phil YoungОтветов: 5
У меня есть регулярное выражение javascript, которое проверяет почтовые индексы Великобритании. Это работает хорошо, но не учитывает, что некоторые люди пишут с пробелами посередине, а другие нет. Я пытался добавить это, но не могу с этим справиться: почтовые индексы Великобритании в основном состоят из 2 букв, за которыми следуют 1 или 2 цифры, необязательный пробел, 1 цифра и 2 буквы.
Вот мое регулярное выражение, которое проверяет почтовые индексы без пробелов:
Я изменил регулярное выражение, так как понял, что в одной группе отсутствуют символы нижнего регистра.
Почему вы хотите проверять почтовые индексы на стороне клиента? Я бы предпочел провести строгую проверку на стороне сервера, поскольку злоумышленник может вставить неверные данные независимо от ваших проверок на стороне клиента. jsalonen 18.06.2012
@jsalonen, это не злонамеренный ввод, конечно, проверки на стороне сервера обязательны! Но вы также хотите показать своим пользователям размер клиента. Извините, сэр, я думаю, вы сделали ошибку, не могли бы вы ее исправить. Adi 18.06.2012
Если вы проверяете почтовые индексы на стороне сервера, вы можете повторно использовать этот код в проверках на стороне клиента: 1) отправить данные на сервер для проверки, 2) если проверка не удалась (на стороне сервера), вернуться обратно в форму с определенной ошибкой. сообщение. Поступая таким образом, вам не нужно будет поддерживать два отдельных кода проверки почтовых индексов! jsalonen 18.06.2012
Проверка почтового индекса запускает немедленное окно предупреждения перед вызовом ajax на сервер (чтобы облегчить трафик), где он также проверяется на стороне сервера. Как только я заработаю это регулярное выражение, я смогу преобразовать его в php. И @Adnan, это регулярное выражение было адаптировано мной из поиска Google, я не совсем новичок! :П Phil Young 18.06.2012
@jsalonen, так что в основном вы говорите, что КАЖДЫЙ РАЗ пользователь делает небольшую ошибку (например, дополнительный пробел в почтовом индексе), я должен отправить на сервер, а затем получить ответ, тогда моя функция обратного вызова будет Действуй соответственно. Отличная работа! Adi 18.06.2012
Я только что проверил точно такое же регулярное выражение в первой ссылке в этом поиске Google с помощью regexpal.com . Работает как шарм, попробуйте. Adi 18.06.2012
^ the beginning of the string
----------------------------------------------------------------------
[a-z]{2} any character of: 'a' to 'z' (2 times)
----------------------------------------------------------------------
\d{1,2} digits (0-9) (between 1 and 2 times
(matching the most amount possible))
----------------------------------------------------------------------
\s* whitespace (\n, \r, \t, \f, and " ") (0 or
more times (matching the most amount
possible))
----------------------------------------------------------------------
\d digits (0-9)
----------------------------------------------------------------------
[a-z]{2} any character of: 'a' to 'z' (2 times)
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
Ответ 3 · рейтинг 3 · Phil H
Согласно страница из архива, которую я нашел, спецификация:
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]$. Не будьте "героем" и шаблонным кодом.
Если вы действительно хотите проверить его на соответствие этой спецификации, общие правила (после удаления пробелов):
Как указал @Stefan: /i для нечувствительности к регистру.
Сделав это, вы можете сопоставить группы (отсюда фигурные скобки) и проверить, соответствуют ли буквы ограниченным диапазонам в документе. На этом этапе вы даже можете вести список разрешенных однобуквенных и двухбуквенных кодов для областей почтовых индексов.
Общее правило для отделения Incode (фрагмент перед пробелом) от Outcode (фрагмент после пробела), по-видимому, состоит в том, что Outcode начинается с последнего числа (даже для GIR).
Честно говоря, я бы перестал заморачиваться после базовой проверки. Если стоит проверить более полную спецификацию, то, вероятно, стоит проверить, существует ли область почтового индекса, и если это того стоит, вы можете также подключиться к реальной службе, которая извлекает адрес из почтового индекса. Эти службы с радостью сообщат вам, что почтовый индекс не существует, что является более надежной и поддерживаемой проверкой, чем вы когда-либо хотели написать.
[Редактировать: есть еще одна спецификация в Википедии, конечно]
Ответ 4 · рейтинг 2 · designgroop
Мы обнаружили, что большинство регулярных выражений не полностью охватывают почтовые индексы Великобритании. Мы обнаружили, что он должен охватывать следующие параметры:
Я не знаю, как делается почтовый индекс Великобритании, и я не понял этого из вашего описания. Кстати, вы можете добавить \s{0,1} там, где нужно сказать "здесь у нас мог бы быть пробел". Это означает "0 или 1 пробел".