繁体   English   中英

从地址字符串中提取门牌号

[英]Extract house numbers from address string

我正在按需从国外数据库导入用户数据。 虽然我将门牌号码与街道名称分开,但另一个数据库却没有。

我用

preg_match_all('!\d+!')

排除数字。 这适用于这样的地址线:

streetname 60

但它不适用于这样的地址线:

streetname 60/2/3

在那种情况下,我最终会提取 60,并且 /2/3 保留在街道名称中。

不幸的是我不是正则表达式专家。 恰恰相反。 我的问题是我不仅需要能够检测数字,还需要能够检测斜杠和连字符。

有人可以帮我吗?

尝试:

preg_match_all('![0-9/-]+!', 'streetname 60/2/3', $matches);

要给出明确的答案,我们将必须了解您数据中的模式。

例如,在德国,我们有时不得不门牌号像13a23-42 ,这也可以被写为23 - 42

一种可能的解决方案是匹配以数字开头的空格后的所有内容

preg_match_all('!\s(\d.*)!', 'streetname 60/2/3', $matches);

但是,如果您拥有13street街道的美国数据,则会产生误报

此方法不使用正则表达式。 只有当它看到第一个数字时才会返回,由空格分解。 非常适合地址,例如 12 Street Road, Street Name 1234B

function getStreetNumberFromStreetAddress($streetAddress){
  $array = explode(' ',$streetAddress);

  if (count($array) > 0){
    foreach($array as $a){
      if (is_numeric($a[0])){
        return $a;
      }
    }
  }
  return null;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM