2012-01-12 2 views
10

Tôi đang cố gắng khớp một tên miền đơn giản: example.comRegex để khớp tên miền đơn giản

Nhưng tất cả các kết hợp của nó.

Làm thế nào tôi sẽ làm điều này để trang trải:

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

Bạn phải sử dụng một regex đơn? Sử dụng trình phân tích cú pháp URL hiện tại và sau đó xem xét các phần riêng lẻ sẽ ít bị lỗi hơn. –

+0

@muistooshort cũng ban đầu tôi có '/^https?: \/\ /.*? \.? Facebook \ .com \ //' nhưng nghĩ rằng nó có thể không hoạt động trong mọi trường hợp? – Andy

+0

Điều đó sẽ cho phép một số URL không hợp lệ thông qua (chẳng hạn như 'http: // a_b.facebook.com /') nhưng điều đó có thể không thành vấn đề. –

Trả lời

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

sử dụng mã:

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

tôi cải thiện nó để phù hợp như "http://abexample.com"

+0

Bạn có thể muốn điều chỉnh lớp nhân vật đó. Không phải tất cả '\ w' đều hợp lệ trong một tên miền (' _' nói riêng) và dấu gạch nối * được * cho phép. –

+0

@itea - cảm ơn - nhưng bạn có thể thêm vào javascript thoát cho tôi không? – Andy

+0

@muistooshort Cảm ơn bạn. – itea

3

Bạn có thể sử dụng để chỉ khớp với phần tên miền của URL:

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

Nó sẽ phù hợp với bất kỳ chuỗi kí tự sau:

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

UPDATE: Để phù hợp với sử dụng đầy đủ URL (không chỉ là miền tên phần):

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

cảm ơn rất nhiều nhưng nó dường như không hoạt động? xem http://jsfiddle.net/v4WVU/ – Andy

+0

Trên thực tế nó hoạt động, xem ở đó: http://jsfiddle.net/v4WVU/3/ Bạn đang cố gắng khớp 'location.href' là' http: // fiddle. jshell.net/_display/'. Như tôi đã viết ở trên RegEx là cho phù hợp với tên miền không đầy đủ URL. – anubhava

4

Một ví dụ chung chung hơn tôi đã sử dụng :

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

Lưu ý rằng giải pháp này không ' t chọn đúng nhãn cho 5 TLD ký tự. Ví dụ:

http://mylabel.co.uk 

sẽ được đón như 'co' thay vì 'mylabel', nhưng

http://mylabel.co 

sẽ được xuất hiện một cách chính xác là 'mylabel'. Regex là đủ tốt cho tôi ngay cả với giới hạn này.

Lưu ý rằng giới hạn 63 ký tự cho nhãn là đặc điểm kỹ thuật RFC. Hy vọng điều này sẽ giúp bất cứ ai tìm kiếm câu trả lời tương tự trong tương lai.

1

Các công trình sau đây trong Java,

^(http:|https:|)[/][/]([^/]+[.])*example.com$

và phù hợp với trường hợp thử nghiệm của bạn, và không trường hợp trận đấu như

http://www.google.com/http://example.com