从PHP

时间:2015-08-07 07:42:02

标签: php html regex currency

我正在尝试从字符串中提取数值,因为我需要在总计算中使用它。

我在其他帖子中读到我应该使用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。

我不确定错误在哪里以及我应该使用哪种方法。

1 个答案:

答案 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