从地址

问题描述:

分离housenumber我必须拆分地址和housenumber为loopup函数。从地址

重要的是,这适用于任何类型的地址,所以我不是100%确定如何以最好的方式做到这一点。

地址可以像

Mystreet 14a 
Mystreet 4 
Mystreet 4a 
Wilderness and I have no housenumber 

我猜的逻辑应该检查数字后面跟着一个或两个字母。

任何不错的方法来做到这一点?

要澄清:这是挪威地址的查找,我相信地址是一个或多个单词后跟可选编号。该号码最后还可以包含一个可选字母(请参阅上面的示例)。

+1

将它总是看起来像吗? “我没有房子号码”?另外,housenumber会始终以数字开头吗?难道不能像a4那样? – 2012-02-13 12:40:27

+0

hm ... regexp也许? – k102 2012-02-13 12:41:10

+0

地址和housenumber单独的表单不是一个选项? – ppp 2012-02-13 12:42:35

试试这个解决方案。我以前preg_match找到一个挪威地址就像你在问题中所描述:

$input_string = 'Mystreet test 33b'; 

$address = ""; 
$number = ""; 

$matches = array(); 
if(preg_match('/(?P<address>[^\d]+) (?P<number>\d+.?)/', $input_string, $matches)){ 
    $address = $matches['address']; 
    $number = $matches['number']; 
} else { // no number found, it is only address 
    $address = $input_string; 
} 

echo "Input: $input_string <br/>"; 
echo "Address: $address <br />"; 
echo "Number: $number"; 

输出示例:

Input: Mystreet test 33b 
Address: Mystreet test 
Number: 33b 
+0

像魅力一样工作,谢谢。 – OptimusCrime 2012-02-13 14:45:08

+0

实际上这是行不通的。尝试输入字符串$ input_string ='heading street 10'; – Gooey 2013-07-18 20:18:08

+2

啊错误是在正则表达式中,[^ d]应该是[^ \ d] – Gooey 2013-07-18 20:20:56

我不说这是一个完美的解决方案。但你可以考虑这一点。

$address="Mystreet 4a"; 
$code = ereg_replace("[^0-9]", "",$address); 
if(empty($code)) 
    echo "No house number found"; 
else 
{ 
    $houseNumber = strstr($address, $code); 
    echo $houseNumber; 
} 

另一种方法是爆炸:

<?php 
$addr = 'Mystreet 4a'; 
$parts = explode(' ', $addr); 
echo $parts[0]; //this is the street (Mystreet) 
echo $parts[1]; //this is the whole number (4a) 
echo (int)$parts[1]; // this is the actual number (4) 
?> 
+0

这对于某些街道名称不起作用,因为它们可以由多个单词构成。如果你想要这种方法,最好通过$ parts [count($ parts)-1]得到数字; (即便如此,这种方法可能会很棘手。) – 2014-07-15 09:42:48