在PHP中,我试图从价格中删除除数字和与数字相关联的小数点之外的所有内容。使用我当前的正则表达式,我无法确定小数是否与数值或货币符号相关联。有什么想法吗?
preg_replace('/[^(0-9).]/', '', $price)
测试值=>预期值
答案 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
$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);