RegEx для проверки только шаблона первой части или полного почтового индекса Великобритании

64
5

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

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

До сих пор я придумал этот

((([A-Za-z]?[A-Za-z])[1-9]?([0-9]|[A-Za-z]))|(([A-Za-z]?[A-Za-z])[1-9]?([0-9]|[A-Za-z])\s[1-9][A-Za-z][A-Za-z]))$

Кажется, что это хорошо работает для всех шаблонов. Но это также подтверждает обратный почтовый индекс (LastPart FirstPart), например. (6FW OX28)

Я ищу следующий шаблон (скопированный из этого вопроса)

1 Letter  1 Number
1 Letter 2 Numbers
2 Letters 1 Number
2 Letters 1 Number 1 Letter
2 Letters 2 Numbers
1 Letter 1 Number (Space) 1 Number 2 Letters
1 Letter 2 Numbers (Space) 1 Number 2 Letters
2 Letters 1 Number (Space) 1 Number 2 Letters
2 Letters 1 Number 1 Letter (Space) 1 Number 2 Letters
2 Letters 2 Numbers (Space) 1 Number 2 Letters

спросил(а) 2021-01-19T15:52:20+03:00 6 месяцев, 2 недели назад
1
Решение
64

Это выглядит достаточно (обновляется за комментарий):

^([A-Z]\d{1,2}|[A-Z]{2}\d(\d|[A-Z]?))( \d[A-Z]{2})?$

см. тест

Он содержит длинное объяснение, я дам короткую версию

В основном есть 2 части, код может быть либо только первой частью, либо первым, а затем вторым.

Первая часть ([AZ]\d{1,2}|[AZ]{2}\d(\d|[AZ])?)
Имея в виду:
[AZ]\d{1,2} - буква и 1-2 цифры
| - ИЛИ
[AZ]{2}\d - две буквы, цифра, затем
(\d|[AZ])? - либо цифра, либо буква, либо ничего (используя ? чтобы сделать его необязательным).

Вторая часть - статическая - [пробел] [цифра] [две буквы], которая является ( \d[AZ]{2}) она сделана необязательной, используя ? символ.

ответил(а) 2021-01-19T15:52:20+03:00 6 месяцев, 2 недели назад
64

Лучшее, что я могу предложить, это:

/^[a-z](\d\d?|[a-z]\d[a-z\d]?|[a-z]?\d?\d \d[a-z]{2}|[a-z]\d [a-z] \d[a-z]{2})$/i

[Regex Demo]

ответил(а) 2021-01-19T15:52:20+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема