我可以在字符串
中使用不同的元素€10.09
69 EUR
69.55$
...
我只想要这个号码。
我做到了,但.
未被考虑
preg_match_all('!\d+!', $price, $matches);
$out = (int)implode('', $matches[0]);
结果:
1009
6955
答案 0 :(得分:1)
您可以使用它来提取值:
<?php
$price = "$10.09,€10.09,69 EUR,69.55$";
$prices = explode(",",$price);
foreach($prices as $num){
preg_match_all('!\d+(\.\d+)?!', $num, $matches);
$out = (float)implode('', $matches[0]);
echo $out." ";
}
?>
结果:
10.09 10.09 69 69.55
答案 1 :(得分:0)
你的方法比大多数人打扰要复杂得多。虽然我鼓励你设法用正则表达式解决它,但在这种情况下货币处理的实用方法是
(float) filter_var( $price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) );
这将返回浮点值,考虑小数
答案 2 :(得分:0)
Tk的 完成以找到解决方案 与这些元素一起工作
preg_match_all('!\d+!', $price, $matches);
$price_extracted = (float)implode('.', $matches[0]);
答案 3 :(得分:0)
对于&#34; old-skool&#34;感到抱歉,但我全都是关于指针的,我来自C&#34; / asm背景,在嵌入式RTOS系统512的时代每个任务的堆栈字节是梦想成真所以...... 在这里,它完全针对速度进行了优化。如果我能做* p ++ :) :) :))
function extractNumber($s) {
$started = false;
$r = "";
for($i=0; $i<strlen($s); $i++) {
$c = $s[$i];
if (($c<'0') && ($c!='.'))
continue;
if ($c>'9') {
if (!$started)
continue;
else
break;
}
$started = true;
$r .= $c;
}
return $r;
}
这个例程的整个运行时间甚至比关于运行正则表达式的思考要快。我没有这样做,但是如果你进行一些模拟,我猜我的速度比所提出的所有正则表达式/内爆/爆炸解决方案快至少500%。