2010-06-09 84 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