PHP正则表达式 - 删除所有非数字和小数

时间:2015-10-29 23:00:06

标签: php regex

在PHP中,我试图从价格中删除除数字和与数字相关联的小数点之外的所有内容。使用我当前的正则表达式,我无法确定小数是否与数值或货币符号相关联。有什么想法吗?

preg_replace('/[^(0-9).]/', '', $price)

测试值=>预期值

  1. $ 43.99 => 43.99
  2. ฿2,320.00 => 2320.00
  3. KR。 479.00 => 479.00
  4. 1999руб。 => 1999年

1 个答案:

答案 0 :(得分:1)

您可以使用

实现这一目标
'/[^\d.]|(?<!\d)\./'

它匹配非数字和非句号或不带数字的句点。然后,只需用空字符串替换以删除匹配的文本。

请参阅IDEONE demo

$re = '/[^\d.]|(?<!\d)\./'; 
$ar = array("\$43.99", "฿2,320.00", "kr. 479.00", "1 999 руб."); 
$result = preg_filter($re, "", $ar);
print_r($result);

输出:

[0] => 43.99
[1] => 2320.00
[2] => 479.00
[3] => 1999

A preg_replace demo

$re = '/[^\d.\n]|(?<!\d)\./'; // \n is added just for demo purposes! 
$str = "\$43.99\n฿2,320.00\nkr. 479.00\n1 999 руб."; 
echo $result = preg_replace($re, "", $str);