разбор цены различного формата в виде строки

0

Я пытаюсь разобрать цену из строки, однако цена имеет много разных форматов, которые я пытаюсь зафиксировать как можно лучше.. вот код, который у меня есть:

$pattern = '#([Ii][Dd][Rr].?\s*[0-9.,]+)|([Rr][Pp].?\s*[0-9.,]+)|(\s[0-9]+\s?[Kk]\s)|([0-9]+[Rr][Bb])|([0-9.,]+\s*[Rr][Ii][Bb][Uu])|(\b[0-9]+[.,][0-9]+[.,]?[0-9]+)#u';

        if (!$this->price)
        {
            $matches = array();
            preg_match($pattern, $caption, $matches);
            if (isset($matches[0]))
            {           

                $price = $matches[0];   
                $price = preg_replace("#[K|k]|[R|r][B|b]#", "000", $price); 
                $price = preg_replace("#[^0-9]#", "", $price); 

                if (strlen($price) > 7)
                {
                    return false;
                }
                $price = floatval($price);  

                if ($price < 1000)
                {
                    $price *= 1000;
                }

                $this->price = $price; 

                //Remove finded price
                $this->caption = preg_replace($pattern, '', $caption, 1);
                $result = true;
            } 
        } 

и вот ценовая строка:

Peacock long blouse Bahan combat, fit to XXL, pj77cm, Ld120cm, berat 0,21kg, Hitam, body pjg, ukuran besar 71.000 (blm + ongkir)// stock terbatas sistaa...... 

однако это возвращает мне 21.000, потому что он анализирует строку 0.21kg как цену. Как избежать 0 или 0. как определение цены в шаблоне?

Теги:

1 ответ

0
([Ii][Dd][Rr].?\s*[0-9.,]+)|([Rr][Pp].?\s*[0-9.,]+)|(\s[0-9]+\s?[Kk]\s)|([0-9]+[Rr][Bb])|([0-9.,]+\s*[Rr][Ii][Bb][Uu])|(\b[1-9]+[.,][0-9]+[.,]?[0-9]+)

Попробуйте это. Смотрите демоверсию. ,21kg было захвачено 6th группами вашего регулярного выражения (\b[0-9]+[.,][0-9]+[.,]?[0-9]+) Поменял это на (\b[1-9]+[.,][0-9]+[.,]?[0-9]+) чтобы исключить 0, и 0...

http://regex101.com/r/lZ5mN8/36

Ещё вопросы

Сообщество Overcoder
Наверх
Меню