如何通过前缀正确匹配英国邮政编码?

Ben*_*min 3 match postal-code

我有许多餐馆都提供给伦敦的某些邮政编码区域,例如:

  • EC1
  • WC1
  • WC2
  • W1

当有人搜索送到他们家的餐馆时,他们会输入完整的邮政编码.

有些人使用空格正确输入邮政编码,其中一些只输入附加的所有字母和数字,没有空格分隔符.为了协调事物,我在尝试匹配之前删除了邮政编码中的任何空格.

到目前为止,我曾经通过检查它是否以相关的前缀开头来匹配邮政编码到前缀,但后来我意识到这不是万无一失的:

  • WC1E123 =>正确匹配 WC1
  • W1ABC =>正确匹配 W1
  • W10ABC=>不匹配W1,应该只匹配W10前缀

如果没有空格的完整邮政编码,如果它与给定的前缀匹配,同时没有使上面的W1/ W10test 失败,我怎么知道呢?

是否有任何解决方案可以解决问题,这不会强迫客户输入邮政编码,空间位置正确?

Al *_*lls 16

英国有6种可能的邮政编码格式:

  • A9 9AA
  • A9A 9AA
  • A99 9AA
  • AA9 9AA
  • AA9A 9AA
  • AA99 9AA

我认为您的解决方案需要有两个部分.第一是验证输入; 第二是抓住第一部分.

验证

这非常重要,尽管我已经意识到你已经说过这不是你想要做的事情,但如果没有它,你将很难获得正确的前缀并可能将你的司机送到错误的地方!

有几种方法可以做到,要么使用第三方来帮助您获取完整正确的地址(许多可用的包括http://www.qas.co.uk/knowledge-centre/product-information/address -postcode-finder.htm(我的公司)),或者至少使用一些注册/类似的健全性测试来验证邮政编码 - 例如Dmitri给你的链接.

如果你看一下你列出的测试用例 - W1ABC和W10ABC是无效的邮政编码 - 如果我们得到那个位正确,那么下一位变得容易多了.

提取前缀

假设你现在拥有一个完整,有效的邮政编码,只需要第一部分(outcode)变得更容易 - 有或没有空格.因为下半部分(incode)有一个标准格式9AA,数字-α-alpha,我会通过发现并删除它来做,只留下你的outcode,无论是W1从W1 0AA,还是W10从W10 0AA.

或者,如果您使用第三方捕获地址 - 他们中的大多数将能够为您单独返回incode和outcode.