为存储格式化英国邮政编码

3

我想把英国邮政编码存储在数据库中。不带空格存储这些邮政编码是否可以?


是的,很安全。所有英国邮政编码都以1个数字和2个字母结尾,然后是一个空格和剩余的内容。伦敦邮政编码是很好的例子,有各种不同的起始代码,但最后3个字符始终为“xyy”,其中x是数字,y是字母。 - Piotr Kula
7个回答

1

enter image description here

最后三位始终为xyy

  • x 数字0-9
  • yy 字母A-Z

前面的任何内容都是网格参考的第一部分,具有各种格式。


1

可以将邮政编码存储为没有空格的形式,但建议在显示或输出时正确格式化它们。

您可以在这里查看允许使用的邮政编码格式。空格后始终有3个字符,因此很容易重新插入它。


0

没有空格存储是可以的,因为您可以随时向每个邮政编码字符串添加一个空格 - 启发式算法非常简单。

正如其他一些用户非常有帮助地解释的那样,所有英国邮政编码都有两组数字和字母,由一个空格分隔。空格后面的组始终包含一个数字和两个字母(因此,空格后面始终有三个字符)。空格前面的组将具有两个、三个或四个字符(请参见此维基百科页面)和下面的屏幕截图。

enter image description here

因此,您可以通过在倒数第三个字符之前添加一个空格来重新创建正确的间距。

R中,它看起来像这样(但是相同的逻辑也适用于其他语言,如Python):

#list of example postcodes
postcodes = c("LS176JA", "OX41EZ", "A99AA")

#add space to each postcode in the list of example postcodes
for (postcode in postcodes){
  last_three = str_sub(postcode, start = -3)
  first_x = str_replace(postcode, last_three, "")
  final_postcode = paste0(first_x, " ", last_three)
  print(final_postcode)
}

这将返回:

[1] "LS17 6JA"
[1] "OX4 1EZ"
[1] "A9 9AA"

0

通常情况下,删除空格是安全的。正如其他人所说,如果需要,您可以稍后重新插入空格。Outcode和Incode之间存在空格通常不会影响邮政投递。在英国邮政编码中,您不应该有任何非字母数字字符,因此,如果您看到破折号,可以安全地将其删除。

我为Experian Data Quality工作,如果您的目标是清洁数据,您可能需要考虑使用地址验证Web服务,例如我们的Pro On Demand产品。这将确保您捕获正确的邮政编码,因为它们随时间而变化,并且格式正确地适用于您的数据库。


0

我们存储邮政编码并接受任何格式的输入,包括有空格或无空格,但是会在数据存储时剥离或更正输入。

我们发现这种方式在将数据用于其他事情时效果更好。

为什么您想要不带空格地存储?


0

英国邮政编码有多种格式: 格式列表

为什么您无法存储空格?


1
我可以存储带有空格的数据。我的担忧是用户可能会输入带有或不带有空格甚至破折号的邮政编码?我想确保数据库中的数据尽可能清洁。 - marcin_koss

0

正如其他人所说,如果这是你想要做的事情,那么删除所有空格并存储它们是没有问题的。就像已经说过的那样,你总是可以在最后三个字符之前加上一个空格来格式化它们。

然而,通常我会以任何合理的格式接收它们,去除所有空格,并将它们存储为带有额外一个空格的形式。存储需求不是问题,并且这样做可以更容易地直接显示出来。你需要在保存之前解决格式问题,所以最好按照需要保存它。


另一个优点是,如果您曾经对这些数据进行任何分析或类似操作(可能会很有价值),那么将其分成两部分非常容易。通过邮政编码的前一部分可以确定人们来自哪里,在这种情况下,使用已经格式化好的数据更容易实现此操作。 - Schroedingers Cat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接