根据我找到的存档页面,规格是:
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 指出的那样: /i 表示不区分大小写。
完成此操作后,您可以匹配组(因此是大括号),并检查字母是否与文档中的受限范围匹配。此时,您甚至可以维护邮政编码区域允许的单字母和两字母代码列表。
将 Incode(空格前的块)与 Outcode(空格后的块)分开的一般规则似乎是 Outcode 从最后一个数字开始(即使对于 GIR)。
坦率地说,我会在基本检查后停止打扰。如果值得根据更完整的规范进行验证,那么可能值得检查邮政编码区域是否存在,如果这值得,您不妨连接到从邮政编码中提取地址的真实服务。这些服务会很高兴地通知您邮政编码不存在,这是一种比您想要编写的更强大和可维护的检查。
[编辑:当然还有维基百科上的另一个规范]