Задать вопрос
@Dimas123

Как извлечь цену из строки?

Есть строки из них нужно вычленить цену в формате число-точка-дробная часть (если есть).
$12.34 -> 12.34
$12,34 -> 12.34
$12.00 -> 12.00
$12 -> 12
12€ -> 12
12,11€ -> 12.11
12.999€ -> 12.99
12.9€ -> 12.9

Дополнительно:
£999.99€(2) -> 999.99
Ц999,99Руб. за шт. (3) -> 999.99
999,99 Руб. за тонну (33) -> 999.99


Нашел такой код, который это делает (кроме дополнительно) на неизвестном мне языке:
private static String getPrice(String input)
{
    String output = "";

    Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?");
    Matcher matcher = pattern.matcher(input);
    if (matcher.find())
    {
        output = matcher.group(0);
    }

    return output;
}


У меня на php этот код не работает
preg_match("\\d{1,3}[,\\.]?(\\d{1,2})?", $str, $matches);
$price = $matches[0];

//Сам я делаю вот так:
preg_match('/\d+\.?\d*/', $str, $matches);
/* но это очень простой код, здесь не учитывается запятая вместо точки 
и скорее всего дополнительные примеры не обработаются нормально, 
например этот "999,99 Руб. за тонну (33)" */
$price = $matches[0];
  • Вопрос задан
  • 496 просмотров
Подписаться 1 Оценить 3 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
MisterX
@MisterX
Вот регулярка из вашего примера правильная
preg_match('|\d{1,3}[,\.]?(\d{1,3})?|', $str, $matches);


UPD: Вот ссылка где удобно тестировать регулярки regexr.com/3chi4
Ответ написан
JRazor
@JRazor
Senior StarkOverFlow Programmer
\d - это любые цифры. \d{1, 3} - любое количество цифр от 1 до 3 символов. Внутри есть квадратные скобки - это перечень символов между цифр [,\.] (точка и запятая). Потом стоит восклицательный знак - это сколько угодно символов. Потом снова цифры. Все просто
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽