我有一個數據庫中的地址包含街道名稱和街道號碼(和可能的添加像A,B,C等)。提取街道名稱和號碼
現在我需要將街道名稱,號碼和可能的情況下,添加到單獨的字段(與物流系統的鏈接)。
任何人都可以幫助我實現這個目標嗎?我與reg的經驗。表達式爲0
幾個可能的實施例可以是:
Stackstreet 14
Stackstreet 14A
堆棧溢出街道14
堆棧溢出街道141C
我有一個數據庫中的地址包含街道名稱和街道號碼(和可能的添加像A,B,C等)。提取街道名稱和號碼
現在我需要將街道名稱,號碼和可能的情況下,添加到單獨的字段(與物流系統的鏈接)。
任何人都可以幫助我實現這個目標嗎?我與reg的經驗。表達式爲0
幾個可能的實施例可以是:
Stackstreet 14
Stackstreet 14A
堆棧溢出街道14
堆棧溢出街道141C
試試這個:
$str = 'Stackstreet 14a';
$matches= explode(" ", $str);
print_r($matches);
之後,你可以檢查每個項目在$匹配的檢測,如果該項目包含一個數字。如果該項目包含一個數字,那麼他的號碼是他的街道名稱的一部分。 例如:
$matches= Array ([0] => Stackstreet [1] => 14a)
"Stackstreet"
- 不包含數字==>街道名稱。
"14a"
- 包含數字==>數字。
這是如何檢測的字符串包含一個數字:
$myString="14a";
if (preg_match('/[A-Za-z].*[0-9]|[0-9].*[A-Za-z]/', $myString))
{
echo 'Contains at least one letter and one number';
}
另一種方式:
根據b01:
嘗試這是看它是否適合你:
$subjects = array("street 12", "street12", "street 12a", "street12a");
foreach($subjects as $subject)
{
if (preg_match('/([^\d]+)\s?(.+)/i', $subject, $result))
{
var_dump($result);
}
}
die_r($result );
您唯一需要的部分是這樣的:
// Find a match and store it in $result.
if (preg_match('/([^\d]+)\s?(.+)/i', $subject, $result))
{
// $result[1] will have the steet name
$streetName = $result[1];
// and $result[2] is the number part.
$streetNumber = $result[2];
}
感謝b01。
這隻會返回街道號碼而不是名稱。我已經找到'/([^\d]+)\s?(.+)/i'。這將街道名稱與編號分開,但不包括可選附加編號。 –
@Mike de Vrind我改變了我的答案,使用explode()函數來分割空間; –
@Mike de Vrind這對你有幫助嗎? –
對不起,但答覆r爲意思一樣有趣,因爲嚴重:
當輸入爲:
<input type=text name=streetAndNumberAndExtension />
你真的需要做的:
<input type=text name=street />
<input type=text name=number />
<input type=text name=extension/>
投擲都在1樁後試圖分裂是意志哈哈,並且需要手動檢查所有的字段,並在可接受之前修復損壞的字段。對於程序員來說,並不是真正的解決方案。
你是完全正確的。這就是它應該完成的方式。但我正在研究現有的網上商店。我不能只是開始更改數據庫和所有相關的代碼和表單。 –
當然,你可以:) ...(或者它是封閉的源代碼?)...無論如何,那麼你所能擁有的只是一個很好的解決方案。你將不得不接受一些不適應。 –
好吧好吧......我可以:p但客戶不會支付所有額外的工作:p但是我認爲,如果一個好的註冊前,錯誤的機會將是微乎其微的。正如我在上面的評論中提到的那樣,我已經發現了一個正則表達式,它將數字中的名字分開,只是我仍然堅持在數字上添加。 –
您能否提供示例值? – BlitZ
取決於這些值的差異,這可能非常困難。也許你可以通過谷歌地理編碼器發送數據,這會返回像這樣的結果? https://developers.google.com/maps/documentation/geocoding/#XML –
這是一個MySQL數據庫嗎? –