2013-05-08 9 views
9

Poszedłem przez wszystkie możliwe sposoby mające na wyrażenie regularne dla sprawdzania zawartości, ale nie dostać nic .. czego potrzebuję jest adres URL może być jakvalidate URL z wyrażeniami regularnymi

google.com 
http://google.com 
https://google.com 
http://www.google.com 
https://www.google.com 

ale nie powinno to pozwolić, jeśli jest to tylko google

wreszcie rzeczą jest .extensions są obowiązkowe

próbowałem to /^[a-z0-9-]+(.[a-z0-9-]*)(.[a-z0-9-]*)$/

może ktoś mi pomóc w tej sprawie ..

Odpowiedz

4

Spróbuj tego wyrażenia

/[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi 

Będzie aceept wszystkie przypadki, które zostały wymienione powyżej

+0

Nie jestem zaznajomiony z wyrażeniem regularnym. Czy mógłbyś podać mi kod php? – Sakir

+1

Używałem tego wyrażenia przez pewien czas i wpadłem na stronę .financial .... więc {2,4} dla domeny najwyższego poziomu powinno być {2,9} – TJB4rn3s

7

Można bezpośrednio zweryfikować URL za pomocą filter_var i FILTER_VALIDATE_URL

if (filter_var($url, FILTER_VALIDATE_URL) !== false) 

Edit

Z Regex

$subject = "http://www.google.com"; 
$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i"; 
preg_match($pattern, $subject, $matches); 
print_r($matches); 

Wyjście

Array ([0] => http://www.google.com) 

Codepad

+0

Sprawdzam z wyrażeniem regularnym, które będzie przechowywane w mojej bazie danych, nie mogę używać tego rodzaju warunków. – kumar

+0

Dlaczego nie, użyj go przed wstawieniem do bazy danych. –

+0

@Nagendra zobacz edytowaną odpowiedź dla wyrażenia regularnego. –

1
((https?:|[^.])\/\/w{0,3}[.]?google.[a-z]{2,4})|google.[a-z]{2,4} 

To nie jest najładniejszy, ale to działa. Sprawdziłem z http://regexpal.com/

+1

Pozwól mi zaproponować kilka ulepszeń. ** 1 ** można użyć 'https?' To będzie pasować zarówno do http, jak i https, ** 2 ** nie trzeba wstawiać 'w' w klasie znaków, ** 3 **' {0, 1} 'oznacza'? ', Dzięki czemu możesz zrobić' \.? '. Chociaż to wyrażenie regularne działa tylko w tym przykładzie, co jeśli miałbym 'http: // translate.google.com' lub' http: // google.fr'? – HamZa

+1

Tak, masz rację co do pewnych ulepszeń.Chciał tego na przykładach, które napisał, więc napisałem to dla tych przykładów. Jeśli chce domeny To można łatwo dodać. Odpowiedziałem na to, co chciał lub co myślałem, że chce :) – Robert

0

Można wypróbować następujące

(^(http|https)://)?(www\.)?\w+\.com 
+0

nie pasuje do "google.com" – Robert

+0

Poprawione RegEx – JRR

+0

Nadal nie działa http://regexpal.com/ sprawdź. – Robert

Powiązane problemy