从字符串中获取金额

时间:2016-02-29 12:14:10

标签: php regex

我正在使用php,我有一个字符串: -

$string ="i have 300 $, 1000$ ,500 euro in my account";

我希望获得300 $, 1000$ ,500 euro并显示。

并进一步删除货币,只有金额和显示。 这是我的代码。

$allwords = preg_split("/\s+/", $string);
           $prices = array();
           foreach ($allwords as $word_value) {
               if (strpos($word_value, '$') !== false) {
                   $prices[] = str_replace(array(","), "", $word_value);
               }
           }

到目前为止,我只能从字符串中获取1000$。请任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

以下正则表达式does what you're looking for

\d+(?:\s?(?:\$|euro))

PHP代码中,这将是:

$string ="i have 300 $, 1000$ ,500 euro in my account";
$regex = '~\d+(?:\s?(?:\$|euro))~';
preg_match_all($regex, $string, $matches);
print_r($matches);

请参阅a demo on ideone.com 要实际获取数字(在您的情况下为300,1000,500),您可以使用如下捕获组:

$regex = '~(\d+)(?:\s?(?:\$|euro))~';
preg_match_all($regex, $string, $matches);
print_r($matches);

为了匹配其他货币(如@Wiktor所指出的),将这些货币添加到非捕获组:

(\d+)(?:\s?(?:\$|euro|¥|yen))

要允许 float 值,请按如下所示更改模式:

([\d.]+)(?:\s?(?:\$|euro|¥|yen))

答案 1 :(得分:0)

简单&简洁的代码可以

$prices = explode(',', $string);
foreach ($prices as $key => $value)   {         
$prices[$key] = floatval($value);
}