获取基于符号的货币代码

Chr*_*yer 2 php currency intl

我目前正在使用API​​而不是浮点数或整数的货币我收到这样的字符串.

  • $ 2.49
  • £2.49
  • €2.49
  • 等等

问题在于我需要单独存储价值和货币,但货币需要存储为ISO代码,例如欧元,美元或英镑而不是欧元和美元.

在PHP中是否有任何方法可以使用NumberFormatter或类似的方式根据货币符号获取货币代码?

目前我只有很长的货币符号和名称列表,string_contains('$2.49', '$')用于检查某种货币.

Mar*_*vin 6

您可以使用NumberFormatter :: parseCurrency:

<?php
$fmt = new NumberFormatter('en_US', NumberFormatter::CURRENCY);

echo "#1: ".$fmt->parseCurrency("$2.49", $curr)." in $curr<br>";
echo "#2: ".$fmt->parseCurrency("£2.49", $curr)." in $curr<br>";
echo "#3: ".$fmt->parseCurrency("€2.49", $curr)." in $curr<br>";
?>
Run Code Online (Sandbox Code Playgroud)

打印:

#1: 2.49 in USD
#2: 2.49 in GBP
#3: 2.49 in EUR
Run Code Online (Sandbox Code Playgroud)

请注意,Richard对使用相同符号的多种货币的评论仍然适用,但可以通过为以下内容指定不同的区域设置来处理NumberFormatter:

<?php
$fmt = new NumberFormatter('en_AU', NumberFormatter::CURRENCY);

echo "#1: ".$fmt->parseCurrency("$2.49", $curr)." in $curr<br>";
?>
Run Code Online (Sandbox Code Playgroud)

例如,将第一个输出更改为:

#1: 2.49 in AUD
Run Code Online (Sandbox Code Playgroud)

  • 我猜想将'en_US`更改为另一个国家/地区代码可能会导致`$`根据区域设置被解释为不同的货币. (2认同)