从字符串中解析货币

时间:2011-02-20 20:34:19

标签: php string parsing currency

我想从PHP中解析一个字符串中的货币,我看过number formatter但没有得到PHP 5.3或者能够添加扩展名。

每个字符串只存在一次货币,并且会以货币符号为前缀,在我的例子中是英镑符号£。货币可能采用以下格式之一:

£0.90
£100
£100.10
£1000

实现这一目标的最佳方法是什么?

修改

以下是一个示例字符串:

Paid a bill £153.93

我想将货币值变为变量。

5 个答案:

答案 0 :(得分:9)

(float)substr($input, strpos($input, "£")+1);

这会得到以下结果:

float(0.9)
float(100)
float(100.1)
float(1000)
float(153.93)

编辑:已更新以反映对问题的更改。这假设所有字符串都与您给出的字符串相似。

答案 1 :(得分:7)

我有另一个答案。触摸速度可能比使用strpos更快,如果输入中有任何空白区域可能会更好。

$input = "£250.75";
$output = floatval(ltrim($input,"£"));
echo $output;
250.75

您还可以将其他货币添加到ltrim中的char列表中:

$output = floatval(ltrim($input,"£$¢"));

这会从您号码的左侧剥离$或£或¢,以及空格,这将破坏使用strpos的解决方案。此外,如果在某些情况下取消货币符号,这将产生相同的结果。

答案 2 :(得分:2)

preg_match('/(?<=£)(?=[\d.]*\d)(\d*(?:\.\d*)?)/', $input, $matches);

会在以下任何内容中找到匹配项:

  • £0.10
  • £0.10
  • £100
  • £100.00

答案 3 :(得分:0)

您可以使用正则表达式($ matches [1]将具有您的值):

preg_match('/£([0-9]+|[0-9]+\.?[0-9]{2})/', $text, $matches);

答案 4 :(得分:-3)

$price = (float) substr($input, 1, strlen($input) - 1);