从地址
分离housenumber我必须拆分地址和housenumber为loopup函数。从地址
重要的是,这适用于任何类型的地址,所以我不是100%确定如何以最好的方式做到这一点。
地址可以像
Mystreet 14a
Mystreet 4
Mystreet 4a
Wilderness and I have no housenumber
我猜的逻辑应该检查数字后面跟着一个或两个字母。
任何不错的方法来做到这一点?
要澄清:这是挪威地址的查找,我相信地址是一个或多个单词后跟可选编号。该号码最后还可以包含一个可选字母(请参阅上面的示例)。
试试这个解决方案。我以前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
像魅力一样工作,谢谢。 – OptimusCrime 2012-02-13 14:45:08
实际上这是行不通的。尝试输入字符串$ input_string ='heading street 10'; – Gooey 2013-07-18 20:18:08
啊错误是在正则表达式中,[^ 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)
?>
这对于某些街道名称不起作用,因为它们可以由多个单词构成。如果你想要这种方法,最好通过$ parts [count($ parts)-1]得到数字; (即便如此,这种方法可能会很棘手。) – 2014-07-15 09:42:48
将它总是看起来像吗? “我没有房子号码”?另外,housenumber会始终以数字开头吗?难道不能像a4那样? – 2012-02-13 12:40:27
hm ... regexp也许? – k102 2012-02-13 12:41:10
地址和housenumber单独的表单不是一个选项? – ppp 2012-02-13 12:42:35