我正在尝试从字符串中提取数值,因为我需要在总计算中使用它。
我在其他帖子中读到我应该使用PHP NumberFormatter 函数。
这是我的代码......
PHP
$fmt = new NumberFormatter( 'za_ZA', NumberFormatter::CURRENCY );
$num = "R1,500.00 ZAR";
var_dump($fmt->parseCurrency($num, $curr));
...以及我得到的相应输出。
HTML
<pre class="xdebug-var-dump" dir="ltr"><small>boolean</small> <font color="#75507b">false</font>
</pre>
我也尝试过正则表达式,但它最终给了我1而不是1500。
我不确定错误在哪里以及我应该使用哪种方法。
答案 0 :(得分:2)
如果你只想要这个号码并且不在乎货币本身,这对你有用:
$num = "R1,500.00 ZAR";
$value = floatval(preg_replace('/[^\d\.]+/', '', $num));
var_dump($value); //float(1500)
如果您想使用 NumberFormatter ,这应该更好地处理逗号而不是句点和其他本地化特定差异,您需要确保字符串的格式正确。您调用 parseCurrency 的方式还可以(只需确保将 $ curr 设置为 ZAR ),但是您获得,这意味着字符串格式不正确。
您可以通过在号码上调用 formatCurrency 来检查格式。您会看到正确的格式是 ZAR1,500.00 ,而不是 R1,500.00 ZAR 。
小例子:
<?
$fmt = new NumberFormatter( 'za_ZA', NumberFormatter::CURRENCY );
$curr = 'ZAR';
$string = $fmt->formatCurrency(1500,$curr);
var_dump($string); //displays "ZAR1,500.00
$value = $fmt->parseCurrency($num, $curr);
var_dump($value); //displays 1500