我正在导入具有不同货币符号数量的文件
£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
非常感谢
答案 0 :(得分:5)
您应该使用NumberFormatter::parseCurrency来执行此操作,而不是使用常规字符串操作。
答案 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标志的问题。现在无法检查解决方案。也许其他人可以提供帮助。