Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Regex nie sprawdza całego ciągu
piekarz
post
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.
  1.  
  2. $patterns = [
  3. 'users',
  4. 'users/?,
  5. 'users/?/level/?'
  6. ]
  7.  


Pytajniki to placeholdery dla liczb.

I teraz kod sprawdzający.

Najpierw wybrane znaki zamieniam na te rozumiane przez regEx.
Potem tworzę już gotowego RegExa.
  1. foreach ($patterns as $patt){
  2.  
  3. $urlReg = str_replace(['/','?'],['\/','.*'],$patt);
  4.  
  5. $regEx = "/^$urlReg$/i";
  6.  
  7. echo preg_match($regEx, $inputUrl);
  8. }


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ę.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 20:54