从地址分开的房屋号码

时间:2012-02-13 12:37:57

标签: php

我必须将地址和housenumber分成一个循环函数。

重要的是,这适用于任何类型的地址,因此我不能100%确定如何以最佳方式执行此操作。

地址可能看起来像

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

我猜逻辑应检查一个数字后跟一两个字母。

有什么好办法吗?

TO CLARIFY:这是对挪威语地址的查找,我认为该地址是一个或多个单词,后跟可选数字。该号码最后还可能包含一个可选字母(参见上面的示例)。

3 个答案:

答案 0 :(得分:6)

试试这个解决方案。我使用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

答案 1 :(得分:-1)

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

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

答案 2 :(得分:-1)

另一种方法是爆炸:

<?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)
?>