split currency and amount from a string

核能气质少年 提交于 2020-01-02 07:33:09

问题


I am importing a file which has amount with different currency signs

£12.10
$26.13
€12.50

I need to import and convert this into single currency. I am splitting the string as follows

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

Couldn't make preg_split work with PREG_SPLIT_DELIM_CAPTURE

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

I have an array of currency sign to currency code

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

I need to 1. split the string into currency sign and value - if there is a better way then what i am doing 2. map the currency sign to currency code. Not able to map with $currencySymbols[$parts[0]]

Any help will be appreciated. (PHP 5.2.6) using charset=utf-8

Many thanks


回答1:


You should probably use the NumberFormatter::parseCurrency to do this instead of regular string manipulation.

Although most of the time the currency symbol will come before the numeric value, there are some European countries where the currency symbol is written last.




回答2:


You shouldn't use splitting, but pattern matching to identify the amount and the currency used. Because in some locales, the currency symbol appears before the amount, in others, it appears behind the amount. Also, in some locales, symbol and amount are separated by spaces.

The following function can be used:

   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];
   }

This is how it would be employed:

  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");

You might get a problem with the EURO sign if you have UTF-8 input. Can't check the solution there right now. Maybe someone else can help out.



来源:https://stackoverflow.com/questions/3002254/split-currency-and-amount-from-a-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!