【发布时间】:2015-04-02 10:02:32
【问题描述】:
我正在尝试从一个字符串中获取英国邮政编码的第一部分,该字符串中可能只有邮政编码的第一部分或完整的邮政编码。我正在努力让它发挥作用。如果通过使用前瞻输入完整的邮政编码,我已经让它工作了,但我似乎无法将前瞻设为可选,所以如果只输入邮政编码的第一部分,它就会匹配。
到目前为止,我的正则表达式是([A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW])(?=( ?[0-9][ABD-HJLNP-UW-Z]{2})))
我有几个必须匹配的邮政编码,这些是使用上述正则表达式的结果:
A10EA - Should match and does
A1 - Should match but doesn't
A10 0EA - Should match and does
A10 - Should match but doesn't
BH18 1AE - Should match and does
BH18AE - Should match and does
EC1M 6HJ - Should match and does
EC1M - Should match but doesn't
Z10 2EV - Shouldn't match and doesn't
QE3 6DA - Shouldn't match but matches E3 6DA
有人可以帮我解决这个问题吗?
我一直使用的正则表达式是邮局的官方正则表达式:
/^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$/i
在有人将此标记为 PHP Find first part of UK postcode when full or part can be entered 的副本之前,事实并非如此。该问题的答案不起作用,请参阅我对答案的评论。
【问题讨论】:
-
您能描述一下英国邮政编码的结构吗?
-
我已经添加了邮局为英国邮政编码提供的官方正则表达式,我不知道如何描述这个结构。
-
我找到了this,但我不确定它是否相关。最好不要使用正则表达式并为此编写一个简单的函数,因为它已经相当复杂了。
-
另外,如果您只想防止用户输入无效的邮政编码,我认为简单的验证就足够了。前段时间我无法在运营商的网站上购买手机,因为它的数据库中没有街道名称,因此不让我继续。
-
不,我已经这样做了。我有一个邮政编码前半部分的数据库,我需要获取用户输入的邮政编码,如果后半部分存在,则修剪后半部分,然后在数据库中检查以获取对应的ID。
标签: php regex postal-code