2017-04-22 78 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

不客氣! –