我想从PHP中解析一个字符串中的货币,我看过number formatter但没有得到PHP 5.3或者能够添加扩展名。
每个字符串只存在一次货币,并且会以货币符号为前缀,在我的例子中是英镑符号£。货币可能采用以下格式之一:
£0.90
£100
£100.10
£1000
实现这一目标的最佳方法是什么?
修改
以下是一个示例字符串:
Paid a bill £153.93
我想将货币值变为变量。
答案 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);
会在以下任何内容中找到匹配项:
等
答案 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);