разделить валюту и сумму из строки - PullRequest
3 голосов
/ 09 июня 2010

Я импортирую файл с суммой с разными знаками валюты

£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 ]

5 голосов
/ 09 июня 2010
3 голосов
/ 09 июня 2010

Вы не должны использовать расщепление, но сопоставление с образцом, чтобы определить сумму и используемую валюту. Поскольку в некоторых локалях символ валюты отображается перед суммой, в других - за суммой. Кроме того, в некоторых локалях символ и количество разделяются пробелами.

Может использоваться следующая функция:

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

Вы можете получить проблему со знаком EURO, если у вас есть вход UTF-8. Не могу проверить решение там прямо сейчас. Может быть, кто-то еще может помочь.

...