Здравствуйте. хочу получит счет:
echo(preg_replace("/[^\d.]/", '', '182.20 Старая цена.'));
получаю:
182.20.
как мне получит только: 182.20
Цену можно извлечь, например, так:
/\d+(?:\.\d+)?/
а с помощью preg_replace
заменить следующим образом:
$value = preg_replace("/.*?(\d+(?:\.\d+)?).*/", "$1", $str);
Но, возможно, для ваших целей будет достаточно следующего?
$str = '182.20 Старая цена.';
$value = trim(stri_replace("старая цена.", "", $str));
Что происходит здесь, и почему не работает ваше выражение.
\.
и цифр \d
. Поэтому последняя точка также
остается на месте. Если ваша входная строка будет иметь вид 123.345.456.890
то вся эта конструкция подойдет под это выражение результат.\d+
соответствуюет целой части.(?:\.\d+)?
. Здесь во-первых, конечный знак ?
говорит о том, что этой группы может и не быть. Начальная конструкция ?:
в скобках говорит, что ее не надо захватывать (non-capturing group). Внутри же группы должна находится точка .\
и 1 или более цифр \d+
. Таким образом, приведенное выражение просто соответствуюет любому целому или дробному числу с разделителем точкой.
if (preg_match('/^(\d+(?:\.\d+)?)/', '182.20 Старая цена.', $match)) {
echo $match[1];
}
else {
// Неправильная цена
}
Ну можно более короткий способ использовать для этого просто привести к float строку
<?php
$string = '182.20 Старая stauagvu a цена.';
echo (float)$string;
http://sandbox.onlinephpfunctions.com/code/214972ada960fe609965f9e1d66b46772d21c81a
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как лучше всего и более правильно выводить в столбик массив ? использовать br ?