将美国街道&次要缩写翻译成完整的版本。

问题描述 投票:1回答:1

以下是清单我这样做是为了 "规范 "一组地址数据,以便于查找。

我试过用 strtr()str_ireplace() 但效果并不好。下面是一组较短的列表,供大家测试。

<?php
function street_abbreviations_regex($input) {
  $list = array(
    ' ave'  => ' avenue',
    ' blvd' => ' boulevard',
    ' cir'  => ' circle',
    ' ct'   => ' court',
    ' expy' => ' expressway',
    ' fwy'  => ' freeway',
    ' ln'   => ' lane',
    ' pky'  => ' parkway',
    ' rd'   => ' road',
    ' sq'   => ' square',
    ' st'   => ' street',
    ' tpke' => ' turnpike',
    ' n'    => ' north',
    ' e'    => ' east',
    ' s'    => ' south',
    ' w'    => ' west',
    ' ne'   => ' northeast',
    ' se'   => ' southeast',
    ' sw'   => ' southwest',
    ' nw'   => ' northwest',
  );
//   $input = strtr(strtolower($input), $list);
  $input = str_ireplace(array_keys($list), array_values($list), strtolower($input));
  $regex_street = (preg_replace("/[^A-Za-z0-9]/", "", $input));
  return $regex_street;
?>

输入

echo street_abbreviations_regex('10 E Union St.') . " <br>\n";
echo street_abbreviations_regex('10 E Union Street') . " <br>\n";

strtr()的输出

10eastunionsoutht
10eastunionsouthtreet

str_ireplace()的输出

10eastunionsouthtreet
10eastunionsouthtreetreet
php street-address
1个回答
1
投票

我在一家名为 SmartyStreets 在这里,我们确实解决了解析、标准化等问题......我想说的是,你要做的任务实际上是非常复杂的。我从经验中知道!

与其列举所有类型的输入 -- 有效和无效 -- 胜过任何正则表达式,不如相信我,地址有许多形式和大小;而且准确地标准化输出并不容易做到。

USPS已经认证了一些供应商,可以使用他们的官方数据进行地址标准化。查看CASS认证的服务。您可以从以下方面开始搜索 LiveAddress API (它是免费的)。它在PHP中使用起来非常简单(因为LiveAddress返回一个带有 PHP原生解析).

如果还有任何关于这方面的问题,我很乐意亲自解答。

© www.soinside.com 2019 - 2024. All rights reserved.