![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 223 Pomógł: 27 Dołączył: 16.04.2008 Skąd: Bakutilu Ostrzeżenie: (0%) ![]() ![]() |
Muszę zrobić walidacje, warunków w sql i mam mały problem, mianowicie dostaję stringa np. "2 AND 2 AND 1 OR 2" gdzie pod liczby podstawiane są warunki. Aby było łatwiej usuwam przed sprawdzeniem wszystkie spacje co daje mi to:
Sprawdzam takim wyrażeniem które działa:
Mogą być używane tylko AND i OR. Ale mam problem jak sprawdzić czy poprawny jest np taki string (nawiasy, ułożenie liczb do podstawienia warunków itd):
Ogólnie wyrażenia nie są mocną stroną w moim warsztacie umiejętności, stąd kierują do was prośbę o pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ja na Twoim miejscu nie bawiłbym się w wyrażenia regularne (a przynajmniej nie robiłbym tego tylko i wyłącznie na regexpach). Za to zbudowałbym prościutki parser, który zagłebiając się w kolejne nawiasy zamieniałby Twoje wyrażenie w ten sposób:
Kod 1. (1 OR 2) OR (1 AND 2 OR (1 AND 2)) 2. W_1 OR (1 AND 2 OR W_2) 3. W_1 OR W_3 4. W_4 Zawartość kolejnych nawiasów mógłbyś walidować w sposób, jaki stosujesz dla prostych warunków. Zresztą, jeśli chodzi tylko o poprawność składniową (ew. filtrowanie znaków), możesz pokusić się o usunięcie nawiasów, sprawdzenie poprawności wyrażenia i porównanie liczby nawiasów otwierających i zamykających. Bo jeśli to jest poprawne: Kod (1 OR 2) OR (1 AND 2 OR (1 AND 2)) to poniższe również musi być poprawne składniowo (chociaż może mieć inny sens logiczny): Kod 1 OR 2 OR 1 AND 2 OR 1 AND 2
Ten post edytował sowiq 9.09.2013, 09:43:33 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 223 Pomógł: 27 Dołączył: 16.04.2008 Skąd: Bakutilu Ostrzeżenie: (0%) ![]() ![]() |
Też tak myślałem, jednak o ile po usunięciu nawiasów przejdzie podstawowa walidacja to jednak porównanie ilości nawiasów odpada bo np:
To też przejdzie, więc chyba jedyną opcją będzie Twoja pierwsza propozycja budowy "małego parsera". Jednak nie ukrywam iż miałem nadzieję że uda się to zrobić wyrażeniem. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam
może tak jak dostajesz taki ciąg Cytat "2 AND 2 AND 1 OR 2"
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 10:44 |