我有几个字符串,我只需要提取php中的价格(显然是数字)。用例如下:
1) Rs. 23,459.45 desired output = 23459.45
2)Our best price 23,459.45 desired output = 23459.45
等等。
我给出了上面的用例,给出了前面的字符可以是任何东西的想法。
请帮忙!
怎么样:
$arr = array(
'Rs. 23,459.45 ',
'Our best price 23,459.45 ',
);
foreach($arr as $string) {
$string = preg_replace('/^.*?('d+),?('d{3})('.'d{2})?.*$/', "$1$2$3", $string);
echo $string,"'n";
}
输出:
23459.45
23459.45
它是:
$result = preg_replace('/[^0-9.]/', '', $string);
-但请注意,在常见情况下,这不会验证数字或提供有效结果,因为字符串可能包含类似'foo . bar,baz . price 20.5 with .6 discount'
的内容——最终结果将不是有效数字。所以上面的代码回答了关于"如何替换"的问题,但不适合验证数字(您没有提到这是否是您的目标)。
关于验证一个数字,这样的问题是不明确的,因为不清楚如何转换..20.5.6
(这将是上面字符串的结果)。但是,如果您只需要检查,请在$result
上使用is_numeric()
,如下所示:
$string = 'foo . bar,baz . price 20.5 with .6 discount';
$result = preg_replace('/[^0-9.]/', '', $string);
$result = is_numeric($result)?(float)$result:null;
您可以使用它来验证以上字符串。当这个函数有效化Rs时,它将返回两个点,所以我使用ltrim来删除第一个点。
<?php
//$s = "Rs. 23,459.45";
$s= "Our best price 23,459.45";
echo $result = ltrim(preg_replace("/[^0-9.]+/", "", $s),'.');
?>
http://codepad.org/cyH5OWyE