2010-06-09 86 views
3

我進口其具有不同的貨幣金額文件簽署分裂貨幣及金額從字符串

£12.10 
$26.13 
€12.50 

我需要導入並轉換成單一貨幣這一點。我分割字符串如下

$parts = split(' ', preg_replace("/([0-9])/", ' ${1}', $amount, 1)); 

無法建立與PREG_SPLIT_DELIM_CAPTURE使preg_split工作

$parts = preg_split("/\d/", $amount, 2, PREG_SPLIT_DELIM_CAPTURE); 

我有貨幣符號的陣列,以貨幣代碼

$currencySymbols = array('£'=>'GBP', '$'=>'USD','€'=>'EUR') 

我需要 1.將字符串拆分爲貨幣符號和值 - 如果有更好的方法,那麼我在做什麼 2.將貨幣符號映射到 貨幣代碼。無法使用$ currencySymbols [$ parts [0]]映射

任何幫助將不勝感激。使用(PHP 5.2.6)的charset = UTF-8

非常感謝

回答

3

你不應該使用分裂,但模式匹配,以確定的數量和使用的貨幣。因爲在某些地區,貨幣符號出現在金額前面,而在其他地方,則出現在金額後面。此外,在某些地區,符號和數量由空格分隔。

以下功能可用於:

function findAmountAndCurrency($s, &$amount, &$currency){ 
    $re_amount="/[0-9\.]+/"; 
    $re_curr="/[£\$€]+/"; 

    preg_match($re_amount, $s, $matches); 
    $amount = floatval($matches[0]); 

    preg_match($re_curr, $s, $matches); 
    $currency = $matches[0]; 
    } 

這是它如何被使用:

function handle($s){ 
    $currencySymbols = array('£'=>'GBP', '$'=>'USD','€'=>'EUR'); 

    findAmountAndCurrency($s, $amount, $currency); 
    echo("Amount: " . $amount . "<br/>"); 
    echo("Currency: " . $currency . "<br/>"); 
    echo("Identified Currency: " . $currencySymbols[$currency] . "<br/>"); 
    } 

    handle("£12.10"); 
    handle("3.212 €"); 
    handle("$ 99.99"); 

,如果你有UTF-8輸入你可能會與歐元符號的一個問題。現在無法檢查解決方案。也許別人可以幫忙。

+0

很抱歉沒有迴應。我以爲我會收到一封電子郵件通知任何回覆。所以雖然你們幾乎立即回覆,但我今天才知道。 我同意你的模式匹配處理區域設置。 我意識到的主要問題是如下所示 「A 30.30£」數據本身 â,¬62.03 我可以使它工作的唯一途徑是設置貨幣符號代碼如下 陣列('A £ '=>' GBP」, 'â,¬'=> 'EUR'); – webber 2010-06-11 03:03:11