![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 23.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam taki oto problem że regex zwraca "true" gdy podany string w części pasuje do innego wzorca. A powinno być tak że pod uwagę jest brany string tylko jako całość. Przykład: Mam trzy wzorce do których następuje sprawdzanie. Te wzorce to wzorce akceptowalnych adresów url.
Pytajniki to placeholdery dla liczb. I teraz kod sprawdzający. Najpierw wybrane znaki zamieniam na te rozumiane przez regEx. Potem tworzę już gotowego RegExa.
I teraz najważniejsze: Dla urla 'users' zwraca mi true dla pierwszego wzoru. POPRAWNIE Dla urla typu 'users/4' zwraca mi true dla drugiego wzoru. POPRAWNIE Dla urla typu 'users/4/level/1' zwarca mi true dla drugiego i trzeciego wzoru. ŹLE Powinno zwrócić true tylko dla trzeciego wzoru. Co jest nie tak? Dlaczego zwraca mi dwa razy true? A po drugie dlaczego nie zwraca true dla trzech wzorów? Chyba tak powinno byś jeśli regEx nie działa poprawnie? I po trzecie, dlaczego dla przypadku drugiego urla nie zwracami true dla dwóch pierwszych wzorów? Bardzo proszę o pomoc co jest źle i jak to naprawić. Z góry dziękuję. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Dla urla typu 'users/4/level/1' zwarca mi true dla drugiego i trzeciego wzoru. ŹLE Powinno zwrócić true tylko dla trzeciego wzoru. . reprezentuje dowolny znak nie będący nową linią, tabulacją, itd., więc zalicza się do tego również /. Do patternu users/.* pasuje wszystko co zaczyna się users/, czyli również users/4/level/1. Jeśli rozdzielasz poszczególne części ciągu znakiem / to proponuję wykluczyć go z wyszukiwania lub jeśli mają tam być tylko litery i cyfry to zastosować np. taki pattern: users/[0-9a-zA-Z]*/level/[0-9a-zA-Z]* Ten post edytował b4rt3kk 24.07.2018, 16:45:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 21:43 |