【问题标题】:split currency and amount from a string从字符串中拆分货币和金额
【发布时间】:2011-03-01 10:38:23
【问题描述】:

我正在导入一个具有不同货币符号金额的文件

£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

非常感谢

【问题讨论】:

    标签: php extract currency


    【解决方案1】:

    【讨论】:

    • NumberFormatter 在 PHP 5.2.6 中不可用
    • @NineBerry:好电话,我没有注意到文档是针对 5.3 的。呸!
    【解决方案2】:

    您不应该使用拆分,而是使用模式匹配来识别使用的金额和货币。因为在某些地区,货币符号出现在金额之前,而在其他地区,货币符号出现在金额之后。此外,在某些语言环境中,符号和数量用空格分隔。

    可以使用以下函数:

       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 符号的问题。现在无法检查那里的解决方案。也许其他人可以帮忙。

    【讨论】:

    • 很抱歉没有回复。我以为我会收到一封电子邮件来通知任何回复。所以虽然你们几乎立即回复了,但我直到今天才知道。我同意您处理语言环境的模式匹配。我意识到主要问题是数据本身,如下所示“£30.30”€62.03 我可以使它工作的唯一方法是将货币符号设置为以下数组('£'=>'GBP' ,'‚¬'=>'欧元');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2011-11-26
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多