Я импортирую файл, который имеет сумму с разными валютными знаками
£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
Большое спасибо
Вероятно, вы должны использовать NumberFormatter :: parseCurrency, чтобы сделать это вместо регулярных манипуляций с строкой.
Хотя большую часть времени символ валюты будет поступать до числового значения, есть некоторые европейские страны, где символ валюты записывается последним.
Вы не должны использовать разделение, но сопоставление шаблонов для определения суммы и используемой валюты. Потому что в некоторых локалях символ валюты появляется перед суммой, в других – по сумме. Кроме того, в некоторых локалях символ и количество разделяются пробелами.
Можно использовать следующую функцию:
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. Невозможно проверить решение прямо сейчас. Может, кто-то может помочь.