Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

И пак regular expressions

Featured Replies

Привет.Благодаря на всички за оказаната до момента помощ, надявам се един ден и аз да мога да направя същото за някого, но за момента все още доста неща не са ми ясни и продължавам да търся тук отговорите. В случая става дума за следното, имаме многоредов масив от рода на : $string = 'Иван купил 6 ябълки всяка по 3 лв и платил 18лв Майка му купила 2кг домати по 1,80лв и 1кг чушки за 2лв и платила 5.60лв Баща му...бла-бла. бла-бла'; Предполагам, че тук вече не става въпрос за няколко реда, така че бих оценил и принципен отговор как мога да взема крайните суми от всеки ред и примерно след обработката на информацията да изведа надпис от рода - Днес цялото семейство похарчи $aлв.Няма гаранции в един ред колко пъти ще се появи число, което ще обозначава сума, но винаги последното число е крайната сума - т.е то е, което трябва да бъде вземано предвид и прибавяно към общия сбор. Поздрави

Привет, Ето ти израза : Този вариант ще матчне доларови суми

preg_match_all("/(:?\$([+-]?[0-9]*[\.,]?[0-9]+))/", $string, $prices);

А този левови

preg_match_all("/(:?([+-]?[0-9]*[\.,]?[0-9]+)(:?\s*(:?лв|bgn)))/i", $string, $prices);

Имай предвид, че сумите трябва да са коректно написани, т.е. числата могат да започват с положителен или отрицателен знак ако такъв липсва се приема за положителен, могат да имат цяла част, ако такава липсва се приема за нула, могат да имат десетичен представен от точка или запетая и дробна част, ако десетичен знак липсва - се приема за цяло число. В първия вариант доларовия знак трябва да бъде поставен непосредствено преди числото. Във втория вариант левовия знак може да бъде лв и bgn независимо от регистъра (приема малки и големи букви) и може да бъде разделен с един или повече знака за празно място (шпация, табулация или нов ред). Числа от сорта на 13,000,000,000.23 няма да бъдат матчнати. Ако искаш и такъв вариант, трябва да сетнем регионални настройки и по строги правила. Също така в условието 3 ябълки по 6лв всяка за общо 18лв, ще бъдат матчнати числата 6 и 18. Ако искаш парсване на такива сложни изрази, трябва по-сериозен подход - парсър и граматика. Все пак, възможностите на регюлър експрешъните за ограничени, те могат да дефинират само автоматни граматики ;) Последно - за да се матчне кирилишкия израз "лв" - трябва инпута идващ от уеб страницата и php файла да бъдат с еднакъв енкодинг - т.е. кодовите таблици да съвпадат! Ако имаш въпроси питай тук, ще мониторирам темата няколко дена... Успех!

  • Автор

Здрасти, Darkterminal, днес си дадох малко почивка и не съм тествал това, което ми прати, но съм сигурен, че ще работи безотказно както всичко друго, с което си ми помогнал.Иначе по-скоро ми трябва матчване със специалните символи за валута $, Е с двете чертичики за еверо, странния знак на паунда и т.н, а някъде из описанията, които четох за PCRE ми се стори, че видях такава опция, но за момента ми стига да матчва и само сумите от типа $20.00.Иначе Regex coach e страхотна програмка вчера доста се позанимавах с нея, но все още имам някой неща, които не мога да разгадая, удобно ли е да ти пиша на лична няколко конкретни въпроса относно синтаксиса на рег. експ. защото за момента не намирам отговора им никъде? Поздрави Лерон

Привет leron, Извинявай за закъснелия отговор. Сега видях, че условието ти е да матчваш само сумите в края на реда ето ти и израза

preg_match_all("/(:?[\$]([+-]?[0-9]*[\.,]?[0-9]+)\s*?$)/m", $string, $prices);

За знаците за Евро, Паунд-Стърлинг, Йен и т.н. - може да ползваш юникод символи от 0x20A0 до 0x20B5. Пробвай ги всичките (най-лесно е да ползваш charmap програмката, тя идва с Уиндоуса ти) и ти ще си избереш кои да ползваш. Просто ги изреди в чарсета описващ валутите. Ако имаш още въпроси питай - няма значение къде :) Продължавам да мониторирам темата. Успех!

Редактирано от darkterminal (преглед на промените)

  • 3 седмици по-късно...

$array = explode (' ', $string); foreach ($array as $s) { pregmatch('/(\d+(?:[\.\,]{1}\d+|\d*))/', $s, $sum); $spend = $spend + $sum; } if ($spend) { echo "похарчени: $spend"; } това е за една валута. за повече от една валута за да не се правят много проверки на символи и т.н. може да се направи в хеш. където ключове да са валутите.

Редактирано от sanddaemon (преглед на промените)

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.