Mar*_*sen 5 html php regex currency
我正在尝试从字符串中提取数值,因为我需要在计算总数时使用它。
我在其他线程中读到我应该使用 PHP NumberFormatter函数。
这是我的代码...
PHP
$fmt = new NumberFormatter( 'za_ZA', NumberFormatter::CURRENCY );
$num = "R1,500.00 ZAR";
var_dump($fmt->parseCurrency($num, $curr));
Run Code Online (Sandbox Code Playgroud)
...以及我得到的相应输出。
HTML
<pre class="xdebug-var-dump" dir="ltr"><small>boolean</small> <font color="#75507b">false</font>
</pre>
Run Code Online (Sandbox Code Playgroud)
我也尝试过正则表达式,但它最终给了我 1 而不是 1500。
我不确定错误在哪里以及我应该使用哪种方法。
如果您只想要数字而不关心货币本身,那么这对您有用:
$num = "R1,500.00 ZAR";
$value = floatval(preg_replace('/[^\d\.]+/', '', $num));
var_dump($value); //float(1500)
Run Code Online (Sandbox Code Playgroud)
如果您想使用NumberFormatter(它应该更好地处理逗号而不是句点和其他本地化特定差异),您需要确保字符串的格式正确。您调用parseCurrency 的方式是可以的(只需确保将$curr设置为ZAR),但您会得到false,这意味着字符串格式不正确。
您可以通过对号码调用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
Run Code Online (Sandbox Code Playgroud)