2017-04-22 111 views
0

我创建了一个html表单,您可以在其中输入街道地址的单个字符串。如何在PHP中提取街道号码,街道名称和街道类型(新月,道路,街道等)?我不确定他们将输入的字符串的长度,并且可能无法提取正确的信息。从PHP中的字符串中提取地址的部分

请您好好帮忙,因为我是PHP编程新手。

这里是我下面的代码:

$address = $_POST["address"]; 

echo "Your address is: $address <br>"; 

$addressSubstring = substr($address,0 , 15); 

echo "Address: $addressSubstring <br>"; 

$strNumber = substr($addressSubstring, 0, 2); 

$strName = substr($addressSubstring, 2, 8); 

$strType = substr($addressSubstring, 8, 15); 

echo "Your street number is: $strNumber <br>"; 
echo "Your street name is: $strName <br>"; 
echo "Your street type is: $strType <br>" 
+0

你能提供的精选传递给'$地址什么samle '?通常情况下,如果您为此分开输入,则更容易,那么您不必经历各种验证和检查,因为用户只能输入您期望的部分内容。 – Qirel

+0

地址请寄样品... – Hossam

+0

嗨@Qirel地址例子是:43 Willow Street,35 Hanover Crescent和52 Longford Road。 – Faye

回答

0

牢记道路类型是“新月|公路|街”:

使用正则表达式可以解决这一问题:

<?php 
$address = '43 Willow Street'; // $_POST["address"] or '35 Hanover Crescent & 52 Longford Road'; 

preg_match_all("/(\d+)(.+?)(crescent|road|street)/i", $example, $out_arr); 

// $no_of_addresses_found = count($out_arr[0]); // in case of future improvements 
$strNumber = $out_arr[1][0];  // 43 
$strName = trim($out_arr[2][0]); // Willow 
$strType = $out_arr[3][0];  // Street 

echo "Your street number is: $strNumber <br>"; 
echo "Your street name is: $strName <br>"; 
echo "Your street type is: $strType <br>" 
+0

非常感谢您的协助 – Faye

+0

不客气。它有用吗? – Hossam

1

你不能依赖于你的代码获得在固定位置子和长度一样,因为他们每次都会发生变化。

如果不使用任何API或AI,您可以做的最好的方法是创建一个包含道路类型(及其缩写)的数组,并检查字符串中是否有任何单词。

因此,您可以使用strpos为每个单词或正则表达式匹配。

然后,您可以从字符串中删除该单词,并再次使用strpos获取第一个空格的位置。然后使用该位置获取空间(街道号)之前的子字符串和空间(街道名称)之后的子字符串。

+0

非常感谢你@AlejandroNunez – Faye

+0

不客气! –