2012-01-12 11 views
10

Próbuję dopasować prostą domenę: example.comRegex do prostej domeny

Ale wszystkie kombinacje tego.

jaki sposób mogę to zrobić na pokrycie:

 
https://example.com 
http://www.example.com 
etc. 
+0

Czy trzeba użyć pojedynczego wyrażenia regularnego? Użycie istniejącego parsera adresów URL, a następnie indywidualne przeglądanie części będzie mniej podatne na błędy. –

+0

@muistooshort dobrze pierwotnie miałem '/^https?: \/\ /.*? \.? Facebook \ .com \ //' ale myślałem, że to może nie działać we wszystkich przypadkach? – Andy

+0

Pozwoliłoby to niektórym błędnym adresom URL (np. 'Http: // a_b.facebook.com /'), ale to nie może być problem. –

Odpowiedz

5
^https?://([\w\d]+\.)?example\.com$ 

za pomocą kodu:

var result = /^https?:\/\/([a-zA-Z\d-]+\.){0,}example\.com$/.test('https://example.com'); 
// result is either true of false 

poprawiłem go dopasować jak "http://abexample.com"

+0

Możesz chcieć dostosować tę klasę znaków. Nie wszystkie '\ w' są poprawne w nazwie domeny (szczególnie' _') i łączniki * są * dozwolone. –

+0

@itea - dziękuję - ale czy możesz dodać javascript dla mnie? – Andy

+0

@muistooshort Dziękuję. – itea

3

Prawdopodobnie można użyć, aby dopasować część nazwy domeny adresu URL:

/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com$/ 

To pasuje do żadnego z następujących ciągów:

https://example.com 
http://www.example.com 
http://example.com 
https://example.com 
www.example.com 
example.com 

UPDATE: Aby dopasować pełnego wykorzystania URL (nie tylko nazwa domeny część):

/^(?:http(?:s)?:\/\/)?(?:[^\.]+\.)?example\.com(?:/.*)?$/ 
+0

wielkie dzięki, ale wydaje się nie działać? zobacz http://jsfiddle.net/v4WVU/ – Andy

+0

Właściwie to działa, zobacz tam: http://jsfiddle.net/v4WVU/3/ Próbujesz dopasować 'location.href', który był' http: // fiddle. jshell.net/_display/'. Jak napisałem powyżej, RegEx służy do dopasowywania nazwy domeny, a nie pełnego adresu URL. – anubhava

4

Bardziej ogólny przykład użyłem :

/http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i 

Należy zauważyć, że rozwiązanie to nie robi” t odebrać właściwą etykietę dla TLD o 5 znakach. Przykład:

http://mylabel.co.uk 

Czy być odbierane jako 'CO', a nie 'mylabel', lecz

http://mylabel.co 

będzie prawidłowo dopasowany jako 'mylabel'. Regex był wystarczająco dobry dla mnie nawet z tym ograniczeniem.

Należy pamiętać, że limit 63 znaków dla etykiety jest specyfikacją specyfikacji RFC. Mam nadzieję, że pomoże to każdemu, kto szuka takiej samej odpowiedzi w przyszłości.