В PHP я пытаюсь исключить все из цены, за исключением чисел и десятичной точки, связанных с числом. С моим текущим выражением регулярного выражения у меня возникают проблемы с попыткой определить, связано ли десятичное число с числовым значением или символом валюты. Есть идеи?
preg_replace('/[^(0-9).]/', '', $price)
Значения теста => Ожидаемые значения
Вы можете добиться этого с помощью
'/[^\d.]|(?<!\d)\./'
Он соответствует нецифровым и непериодическим периодам или периодам, которым не предшествует цифра. Затем просто замените пустой строкой, чтобы удалить согласованный текст.
См. Демонстрацию IDEONE:
$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
preg_replace
версия preg_replace
:
$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);
preg_filter
.... Я сейчас наполовину сплю.
(
и)
качестве допустимых символов.[^\d\.]