php - 从地址字符串中提取邮政编码

标签 php regex zipcode

我有一些完整的地址,例如:

$addr1 = "5285 KEYES DR  KALAMAZOO MI 49004 2613"
$addr2 = "PO BOX 35  COLFAX LA 71417 35"
$addr3 = "64938 MAGNOLIA LN APT B PINEVILLE LA 71360-9781"

我需要从字符串中获取 5 位邮政编码。我怎样才能做到这一点?也许用正则表达式?

可接受的答案假定一个地址中可能有多个 5 位数字,但邮政编码始终是最后一个连续的 5 位数字。

我的想法是使用 explode 然后遍历并检查每个索引。谁有更好的主意?

非常感谢任何帮助..

最佳答案

谈到美国邮政编码,为了获得邮政编码,您可以使用以下正则表达式:

/\b[A-Z]{2}\s+\d{5}(-\d{4})?\b/

解释:

\b         # word boundary
[A-Z]{2}   # two letter state code
\s+        # whitespace
\d{5}      # five digit zip
(-\d{4})?  # optional zip extension
\b         # word boundary

Online Example

在您的 PHP 中使用它:

$addr1 = "5285 KEYES DR  KALAMAZOO MI 49004 2613";
$addr2 = "PO BOX 35  COLFAX LA 71417 35";
$addr3 = "64938 MAGNOLIA LN APT B PINEVILLE LA 71360-9781";

function extract_zipcode($address) {
    $zipcode = preg_match("/\b[A-Z]{2}\s+\d{5}(-\d{4})?\b/", $address, $matches);
    return $matches[0];
}

echo extract_zipcode($addr1); // MI 49004
echo extract_zipcode($addr2); // LA 71417
echo extract_zipcode($addr3); // LA 71360-9781

Online Example

编辑 1:

为了扩展功能和灵 active ,您可以指定是否希望保留状态代码:

function extract_zipcode($address, $remove_statecode = false) {
    $zipcode = preg_match("/\b[A-Z]{2}\s+\d{5}(-\d{4})?\b/", $address, $matches);
    return $remove_statecode ? preg_replace("/[^\d\-]/", "", extract_zipcode($matches[0])) : $matches[0];
}
 
    echo extract_zipcode($addr1, 1); // 49004 (without state code)
    echo extract_zipcode($addr2);    // LA 71417 (with state code)
 

Online Example

关于php - 从地址字符串中提取邮政编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21074812/

相关文章:

php - 如何使用 Ajax 从 MySQL 获取信息?

database - 城市到大都市区

Mysql 子查询 - 需要在两个类似查询之间建立连接以计算邮政编码和邮政编码的出现次数

php - 当INSERT语句包含引号时如何导入sql文件

php - 将动态 PHP/SQL 动态子菜单与 CSS 集成

php - 根据特定键在对象数组中查找重复项

javascript - 提取动态字符串中的单词

regex - 与 (foo|bar|baz) 相反

regex - Ansible:在变量周围放置引号,但前提是引号尚不存在

javascript - 如何使用 onLoad 加载 jQuery JSON。从表格上的邮政编码获取城市和州?