如何替换php中字符串中除数字(200、200.45等)以外的所有字符


How to replace all characters except a numeral (200, 200.45 etc.) from a string in php?

我有几个字符串,我只需要提取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