2011-06-12 74 views
3

URL我需要驗證像Web服務器的URL。 喜歡的東西http://localhost:8080/xyz正則表達式與端口驗證

我們怎樣才能做到這一點使用正則表達式。對不起,新的正則表達式。

+0

你有什麼這麼遠嗎? – 2011-06-12 10:29:17

+3

*什麼*你想使用用正則表達式來驗證網址嗎? – Gumbo 2011-06-12 10:38:32

+1

你怎麼能指望一個正則表達式來驗證URL?你會不會更好地嘗試*訪問*看看你是否得到[2xx](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success)? – Johnsyweb 2011-06-12 11:00:27

回答

7

相關規範可以rfc 3986被發現和包括所有可能的URL組成部分採用正規的語法定義。但是,爲了您的目的,這些可能會過於籠統。在HTTP(S)協議下稍微稠表達僅匹配的URL會是

http[s]?://(([[:alpha:][:digit:]-._~!$&'\(\)*+,;=]|%([0-9A-F]{2}))+|([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))(:[0-9]+)?(/([[:alpha:][:digit:]-._~!$&'\(\)*+,;=]|%([0-9A-F]{2}))*)+(\?([[:alpha:][:digit:]-._~!$&'\(\)*+,;=/?]|%([0-9A-F]{2}))+)?(#([[:alpha:][:digit:]-._~!$&'\(\)*+,;=/?]|%([0-9A-F]{2}))+)?

該情況下可以簡化爲

http[s]?://(([^/:\.[:space:]]+(\.[^/:\.[:space:]]+)*)|([0-9](\.[0-9]{3})))(:[0-9]+)?((/[^?#[:space:]]+)(\?[^#[:space:]]+)?(\#.+)?)?

可以確信有關的正確語法url組件。

注意,您可能希望更嚴格的模式如用於全文搜索並僅允許iana註冊的頂級域名。

希望它能幫助,

最好的問候,卡斯滕

+0

如果存在斜線,則此正則表達式不匹配。你如何擴展它以匹配即使是後面的斜線? – yayitswei 2017-05-15 18:18:46