Принятый ответ отражает правила, данные Royal Mail, хотя в регулярном выражении есть опечатка. Эта опечатка, похоже, была там и на сайте gov.uk (как на странице архива XML).
В формате A9A 9AA правила допускают символ P в третьей позиции, в то время как регулярное выражение запрещает это. Правильное регулярное выражение будет выглядеть следующим образом:
(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-HJKPSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})
Сокращение этого результата приводит к следующему регулярному выражению (которое использует синтаксис Perl / Ruby):
(GIR 0AA)|([A-PR-UWYZ](([0-9]([0-9A-HJKPSTUW])?)|([A-HK-Y][0-9]([0-9ABEHMNPRVWXY])?))\s?[0-9][ABD-HJLNP-UW-Z]{2})
Оно также включает дополнительное пространство между первый и второй блоки.