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

あなたはようこそ! –

関連する問題