从字符串中拆分货币和金额

时间:2010-06-09 00:05:03

标签: php extract currency

我正在导入具有不同货币符号数量的文件

£12.10
$26.13
€12.50

我需要导入并将其转换为单一货币。我按如下方式分割字符串

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

无法使preg_split与PREG_SPLIT_DELIM_CAPTURE一起使用

$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

非常感谢

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分: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输入,你可能会遇到EURO标志的问题。现在无法检查解决方案。也许其他人可以提供帮助。