2011
11.30

Tutorial dla Doctrine i Zenda

Pisanie tutoriala pochłania ogromne ilości czasu. Dla przykładu podam wam, że opisanie instalacji Zenda tak, żeby było to zrozumiałe i oczywiste zajmuje co najmniej 3 godziny.

Instalacja wszystkiego od podstaw.
Wypisywanie dokładnie krok po kroku co się robiło.
Analizowanie czy ktoś może tutaj popełnić błąd.
Analizowanie czy ktoś może mieć problemy ze względu na konfiguracje.
Redagowanie tekstu.
Wypisanie zwrotów i treści które mogą być niejasne.
Objaśnienie niezrozumiałych zwrotów, ew. zastąpienie czymś bardziej zrozumiałym.
Redagowanie tekstu przez żonę :D

Ostatnio naprawdę nie miałem czasu się tym zająć. Jedyny wolny dzień w tygodniu wolę spędzić z rodziną i taki jest efekt, że nic się tutaj nie pojawia bo brakuje czasu. Artykuł traktujący o instalacji Doctrine jest w połowie drogi. Może do weekendu go dokończę ;)

2011
11.30

Mieliście kiedyś problem ze sprawdzeniem czy adres URL jest poprawny?

Możemy niby napisać jakąś prostą funkcję jeśli wiemy dokładnie co się tam znajdzie. Ale czy będziesz pamiętać o możliwości przekazania parametrów logowania? portu? dostania się poprzez adres IP a nie domenę?

No właśnie…

W PHP mamy niby funkcje parse_url ale w manualu PHP wyraźnie napisane jest:

Ta funkcja nie służy do sprawdzania poprawności podanego URL

Co więc począć?

Z lenistwa i niechęci do studiowania anglojęzycznej dokumentacji zacząłem szukać w internecie idealnego wyrażenia regularnego, które sprawdzi dla mnie poprawność adresu URL. Szperałem i szperałem aż trafiłem tutaj. Mathias włożył sporo trudu w odnalezienie i przetestowanie wielu wyrażeń regularnych. Postanowiłem więc zaufać jego testom (po co robić coś co ktoś już zrobił) i wybrałem najlepsze z wyrażeń regularnych wg. jego testów.

Nie ufałem mu jednak na tyle, żeby w ciemno kopiować co mi w przeglądarce wyskoczyło.

Postarajmy się więc zrozumieć co poniższe wyrażenie może oznaczać:

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iu

Długie jak cholera (502 znaki). Wyczytać stąd nic się nie da, poza tym, że obsługuje tylko protokoły http, https i ftp. Pomogę wam jednak w zrozumieniu tego co się tutaj dzieje.

Czytaj więcej >>