【问题标题】:How to validate a UK postal code in Java?如何在 Java 中验证英国邮政编码?
【发布时间】:2014-11-25 18:35:26
【问题描述】:

程序中的一个功能是用户输入他们的邮政编码。到目前为止,我有:

if ( postcode != //SOMETHING// )
{
    JOptionPane.showMessageDialog(this, "Not UK Postcode", "Postcode must be a valid UK postcode", jOptionPane.ERROR_MESSAGE);
}

我会在 if 语句中添加什么内容以检查输入的邮政编码是否为有效的英国邮政编码?

【问题讨论】:

  • 那么,您有有效的英国邮政编码列表吗?它在数据库中吗?在文本文件中?可通过网络服务获得?信鸽分期提供?确实,在开始编写代码之前,您需要考虑一下它应该如何工作。
  • 您是否研究过什么是有效的邮政编码?
  • @DavidWallace 不,只是确保他们不能在邮政编码字段中输入“BFUWIDAPBVUIWDP”之类的内容
  • @KickButtowski 不完全重复。如果我们假设 OP 打算将候选邮政编码与链接问题中提供的正则表达式进行匹配,那么他/她仍然没有实际进行匹配的代码。

标签: java validation if-statement postal-code


【解决方案1】:

有一些特殊代码,例如 GIR 0AA 和 SAN TA1,在前面给出的格式中没有提到。

字母 J 从未被发现是前两个字母之一。字母 Q、V 和 X 从未出现在邮政编码的首位。在第二个位置找不到字母 I 和 Z(单个邮政编码 GIR 0AA 除外)。在第三个位置是字母的情况下,找不到字母 I、L、O、Q 和 Z。只有字母 A、B、E、H、M、N、P、R、V、W、X 和 Y 可以出现在第四个位置。在空格后面的邮政编码部分,永远找不到字母C、I、K、M、O和V。

验证当前英国邮政编码的正则表达式是:

\A((GIR 0AA)|(SAN TA1)|[A-I|K-P|R-U|W|Y-Z]0-9[0-9][A-B|D-H|J|L|N|P-U|W-Z] [A-B|D-H|J|L|N|P-U|W-Z]|[A-I|K-P|R-U|W|Y-Z][0-9]0-9[0-9][A-B|D-H|J|L|N |P-U|W-Z][A-B|D-H|J|L|N|P-U|W-Z]|[A-I|K-P|R-U|W|Y-Z][0-9]A-H|J-K|M-N|P|R-Y[0-9 ][A-B|D-H|J|L|N|P-U|W-Z][A-B|D-H|J|L|N|P-U|W-Z]|[A-I|K-P|R-U|W|Y-Z][A-H|K-P|R-U| W|Y]0-9[0-9][A-B|D-H|J|L|N|P-U|W-Z][A-B|D-H|J|L|N|P-U|W-Z]|[A-I|K-P|R-U| W|Y-Z][A-H|K-P|R-U|W|Y][0-9]0-9[0-9][A-B|D-H|J|L|N|P-U|W-Z][A-B|D-H|J| L|N|P-U|W-Z]|[A-I|K-P|R-U|W|Y-Z][A-H|K-P|R-U|W|Y][0-9]A-H|J-K|M-N|P|R-Y[0-9] [A-B|D-H|J|L|N|P-U|W-Z][A-B|D-H|J|L|N|P-U|W-Z])\Z

您可以在http://www.grcdi.nl/gsb/united%20kingdom.html找到有关英国邮政编码的更多信息

【讨论】:

  • 我住在英国,但我对邮政编码的了解并不多!
【解决方案2】:

已经有很多关于这方面的信息,包括:

但考虑到这些,英国的邮政编码有 6 种可能的格式:

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

您可以通过多种方式验证它们 - 您需要提供更多信息来准确解释您的目标。

语法验证

我们可以使用正则表达式来验证邮政编码看起来像邮政编码。类似于以下内容的东西应该可以工作。它允许 6 个值。再次,网上有更复杂/完整的示例 - 取决于您所追求的。

^[A-Z]{1,2}[0-9R][0-9A-Z]?[0-9][ABD-HJLNP-UW-Z]{2}$

验证

仅仅因为邮政编码看起来像邮政编码,并不意味着它就是邮政编码。如果您尝试获取完整地址或确保用户输入的邮政编码确实存在,您可以使用 Royal Mail PAF 文件或第三方来帮助您获取完整且正确的地址(许多可用地址包括 http://www.qas.co.uk/knowledge-centre/product-information/address-postcode-finder.htm(我的公司))。

【讨论】:

  • 对我来说,reg ex 只能在 Java 11 中使用,中间问号后有一个空格:^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多