@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];
  • Вопрос задан
  • 449 просмотров
Решения вопроса 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 символов. Внутри есть квадратные скобки - это перечень символов между цифр [,\.] (точка и запятая). Потом стоит восклицательный знак - это сколько угодно символов. Потом снова цифры. Все просто
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы