2010-11-17 137 views
-1

Possible Duplicates:
PHP validation/regex for URL
PHP regex for validating a URL驗證URL使用正則表達式

我使用

(((?:http|https):\/\/[a-zA-Z0-9\/\?=_#&%~-]+(\.[a-zA-Z0-9\/\?=_#&%~-]+)+)|(www(\.[a-zA-Z0-9\/\?=_#&%~-]+){2,})) 

在我的腳本來驗證URL。

但我的朋友告訴我,有這個URL一個問題:

http://www.example.com/example(200)aaaa.rar 

如何添加「(」和「)」我的正則表達式語句?

我應該在我的正則表達式中存在其他字符嗎?

+0

你使用的是什麼正則表達式引擎? – Oded 2010-11-17 18:16:45

+0

我在php – faressoft 2010-11-17 18:17:53

+0

中使用preg_match根據你的正則表達式,www.foo。#%〜是一個有效的URL。無論你使用的是什麼語言,都可能有一個更好的URL驗證器。 – 2010-11-17 18:18:13

回答

0

我可以推薦這個網站:http://regexlib.com/ 點擊頂部的Browse並選擇Uri按鈕。

雖則回答你的問題,(((?:http|https):\/\/[a-zA-Z0-9\/\?=#&%~-]+(.[a-zA-Z0-9\/\?=#&%~-]+)+)|(www(.[a-zA-Z0-9\/\?=_#&%~-\\)\\(]+){2,}))

注意\)\(接近尾聲。它們必須被轉義(前綴爲\\),因爲它們是用於在正則表達式中分組的字符。

+0

它不起作用http://regexr.com?2simo – faressoft 2010-11-17 18:20:05

+0

那不不過,請考慮所有那些(不幸)現在有效的非ASCII字符的國際化域名。 – TeaDrivenDev 2010-11-17 18:20:06

+0

我對這個網站的格式不是100%熟悉。因此,一些字符在內部丟失,這就是爲什麼我假設你指向一個將有答案的來源,毫髮無損。 @GCATNM:非常真實,但我不認爲(雖然我可能是錯的),他們正在尋求全面包容。 – 2010-11-17 18:22:29

0

我相信規範將回答你的問題RFC-2068,雖然你需要解開你的BNF靴子的旅程。

總之,幾乎所有的字符可以在域名後使用,除少數保留那些必須進行轉義:

The BNF [in the RFC] includes national characters not allowed in valid URLs as specified by RFC 1738, since HTTP servers are not restricted in the set of unreserved characters allowed to represent the rel_path part of addresses, and HTTP proxies may receive requests for URIs not defined by RFC 1738

2

PHP已經有一個方法來驗證網址,filter_var,這將工作比你的正則表達式更好(正如我上面評論的,允許誤報):

$url = "http://www.example.com/example(200)aaaa.rar"; 
var_dump(filter_var($url, FILTER_VALIDATE_URL));