2011-06-02 67 views
1

提取字符串我有一些字符串(地址),所有這樣的:PHP:從另一個

2街拉姆達,75018,PARIS

我想要得到的郵政編碼,在這例如「75018」。我一直在嘗試不同的解決方案,但我不熟悉轉義字符,也不知道如何檢測字符串中的昏迷。我應該使用哪個函數來提取郵政編碼?

回答

3

你可以試試這個:

preg_match('/([0-9]{5})/',$string,$match); 
echo $match[1]; 

只要有地址逗號分隔或只是空格分隔就可以工作

+0

謝謝,這做了(與echo $匹配[0];),對於我的問題,我認爲這是最好的解決方案,因爲我確信郵政格式將永遠是唯一的字符串(除了科斯特departement的郵政編碼包含字母)。如果有人寫他的地址如「2,rue lambda ...」,爆炸解決方案可能會導致問題。謝謝大家 – Joeyjoejoe 2011-06-02 13:33:30

+0

@joey:是的,這將適用於任何格式。如果這對你有幫助,請考慮將其標記爲答案。 – dynamic 2011-06-02 13:34:17

+1

可能會突破「12345無論什麼,23456,假城市」。確保你的地址永遠不會有5位或更多位的數字。 – cHao 2011-06-02 13:48:21

3

如果所有的地址是法國,其中有一個5位數的郵政代碼,那麼你可以使用下面的正則表達式捕捉到它:

\b(\d{5})\b 

在PHP中,你可以使用它preg_match爲:

$input = '2 rue lambda, 75018, PARIS'; 
if(preg_match('/\b(\d{5})\b/',$input,$match)) { 
    $postal_code = $match[1]; 
} 

請注意,這將捕獲地址中的前5位數字。 一般郵政編碼自帶的地址的末端,所以我們可以通過使用正則表達式通過在地址捕捉最後5位數字改善方法:

.*\b(\d{5})\b 
3

如果逗號是永遠存在,這很簡單,只要explode()

$parts = explode(",", "2 rue lambda, 75018, PARIS"); 
$postcode = trim($parts[1]); 
+0

如果總是沒有逗號,該怎麼辦? – dynamic 2011-06-02 13:27:04

0

這是否總是它的格式?如果是這樣,你可以explode

$str = '2 rue lambda, 75018, PARIS'; 
$array = explode(',',$str); 
$street = $array[0]; 
$postal = $array[1]; 
$city = $array[2];