Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyrażenie regularne, tyty.pl zmiana na http://tyty.pl
Maciek_#_&
post
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 1
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


Cześć ponownie (IMG:style_emoticons/default/smile.gif)

Wyrażenia regularne to straszna rzecz, szczególnie jak się jej nie rozumie, dlatego liczę na pomoc,
preg_match ma zamieniać adres tak, żeby był w nim "http://" nawet jeśli potencjalny użytkownik wpisze adres.pl bez http.

Jak to miałby wyglądać ?

preg_match działa na zasadzie
  1. preg_match(wyrażenie1, wyrażenie1_zamień_na);

tak ?

Dziękuje za pomoc (IMG:style_emoticons/default/happy.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wdev
post
Post #2





Grupa: Zarejestrowani
Postów: 86
Pomógł: 20
Dołączył: 20.01.2010

Ostrzeżenie: (0%)
-----


Witam,

Funkcja o którą pytasz, to właściwie nie jest preg_match, a substr_compare (musisz sprawdzić, czy początkowe znaki to http://), ale i tak wypadałoby sprawdzić, czy użytkownik podał poprawny adres URL.
Gdybyś dobrze poszukał na php.net (opis funkcji preg_match) znalazłbyś takie wyrażenie regularne dla URL-a (no dobra, usunąłem ftp:// i https:// (IMG:style_emoticons/default/winksmiley.jpg) ):
  1. $regex = "/^(http\:\/\/)?"; // SCHEME
  2. $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass
  3. $regex .= "([a-z0-9-.]*)\.([a-z]{2,3})"; // Host or IP
  4. $regex .= "(\:[0-9]{2,5})?"; // Port
  5. $regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path
  6. $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query
  7. $regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?/"; // Anchor

Pytanie, czy jest Ci ono potrzebne w tak rozbudowanej formie, ale na to sam sobie musisz odpowiedzieć (IMG:style_emoticons/default/winksmiley.jpg) Jeśli jednak potrzebujesz, to możesz je też rozbudować o inne protokoły, np. zmieniając w 1. linijce http na (http|ftp|ssl) itp.
Po sprawdzeniu, czy URL jest poprawny, wystarczy mała funkcja:
  1. dodaj_http($string){
  2. if(isset($string) and substr_compare($string, 'http://', 0, 7) !== 0){
  3. return 'http://' . $string;
  4. }
  5. else{
  6. return $string;
  7. }
  8. }


A tak w ogóle to ja bym się zastanowił, czy nie warto zrobić tego w drugą stronę - obcinając wszędzie "http://" z przodu, żeby się później nie bawić z tymi ukośnikami np. przy zapisie do bazy danych, czy coś (IMG:style_emoticons/default/winksmiley.jpg) No i oczywiście zachęcam do nauczenia się wyrażeń regularnych, bo to baaaaardzo przydatna rzecz (IMG:style_emoticons/default/smile.gif)
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: 16.10.2025 - 23:21