php 提取英国邮政编码并验证它

发布于 2024-11-16 14:50:19 字数 204 浏览 5 评论 0原文

我有一些文本块,比如

John+and+Co-Accountants-Hove-BN31GE-2959519

我需要一个函数来提取邮政编码“BN31GE”。它可能不存在并且有一个没有邮政编码的文本块,因此该函数还必须验证提取的文本是否是有效的邮政编码。

John+and+Co-Accountants-Hove-2959519

I have some text blocks like

John+and+Co-Accountants-Hove-BN31GE-2959519

I need a function to extract the postcode "BN31GE". It may happen to not exist and have a text block without postcode so the function must also validate if the extracted text is valid postcode .

John+and+Co-Accountants-Hove-2959519

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

把时间冻结 2024-11-23 14:50:19

英国政府邮政编码的数据标准是:

((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))

编辑:我在一些(个人)代码中引用了上述内容,并引用了现在不存在的英国政府网页。适当的英国标准是 BS7666,目前提供有关此的信息 这里。这列出了一个略有不同的正则表达式。

The UK Government Data Standard for postcodes is:

((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))

Edit: I had the above in some (personal) code with a reference to a now non-existence UK government web page. The appropriate British Standard is BS7666 and information on this is currently available here. That lists a slightly different regex.

独自←快乐 2024-11-23 14:50:19

查找以下代码以提取有效的英国邮政编码。如果发现邮政编码为空,则返回数组。

<?php
$getPostcode="";
$str="John+and+Co-Accountants-Hove-BN31GE-2959519";
$getArray = explode("-",$str);
if(is_array($getArray) && count($getArray)>0) {
    foreach($getArray as $key=>$val) {
        if(preg_match("/^(([A-PR-UW-Z]{1}[A-IK-Y]?)([0-9]?[A-HJKS-UW]?[ABEHMNPRVWXY]?|[0-9]?[0-9]?))\s?([0-9]{1}[ABD-HJLNP-UW-Z]{2})$/i",strtoupper($val),$postcode)) {
            $getPostcode = $postcode[0];
        }
    }
}
print"<pre>";
print_r($getPostcode); 
?>

Find below code to extract valid UK postal code. It return array if post code found otherwise empty.

<?php
$getPostcode="";
$str="John+and+Co-Accountants-Hove-BN31GE-2959519";
$getArray = explode("-",$str);
if(is_array($getArray) && count($getArray)>0) {
    foreach($getArray as $key=>$val) {
        if(preg_match("/^(([A-PR-UW-Z]{1}[A-IK-Y]?)([0-9]?[A-HJKS-UW]?[ABEHMNPRVWXY]?|[0-9]?[0-9]?))\s?([0-9]{1}[ABD-HJLNP-UW-Z]{2})$/i",strtoupper($val),$postcode)) {
            $getPostcode = $postcode[0];
        }
    }
}
print"<pre>";
print_r($getPostcode); 
?>
醉态萌生 2024-11-23 14:50:19

使用正则表达式: preg_grep 函数,

我不知道英语邮政编码的格式,但你可以使用类似的内容:

(-[a-zA-Z0-9]+-)+

This matches

  • "-Accountants-"
  • "-BN31GE-"

然后你可以继续采用第二个值,或者你可以增强你的正则表达式以完全匹配英语邮政编码,比如也许

 ([A-Z0-9]{6})

Use a regex: preg_grep function,

I don't know the format of english postcodes but you could go with something like:

(-[a-zA-Z0-9]+-)+

This matches

  • "-Accountants-"
  • "-BN31GE-"

You can then proceed at taking always the second value or you can enhance you regex to match exactly english postcodes, something like maybe

 ([A-Z0-9]{6})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文