2012-05-21 55 views
0

我對URL這個正則表達式提高正則表達式的URL

"^(((https?|ftp|file|)://)|(www))[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]$" 

幾乎所有我的測試場景的作品,除了一個

"www.foo" <---WRONG this url it's not valid for my system 
"www.foo.com" <--- valid 
"www.blah.net" <--- valid 
"http://blah.com" <--- valid 
"https://blah.com" <--- valid 

是否有人可以幫助我提高我的正則表達式

+2

什麼是您系統的有效tldns? –

+0

'.com''.net''.com.ve''.org''.gob''.edu',那裏只有幾個,但可能更多 – Jorge

回答

4

我不會推薦這個。

www.foo例如可能是一個有效的本地主機名。

無論如何。讓System.Uri做的辛勤工作,並通過它的許多特性訪問的各個部分

http://msdn.microsoft.com/en-us/library/system.uri.aspx

+0

儘管'www'將是主機,'foo'將是域名。 –

+0

我嘗試了與正則表達式相同的技巧,並最終仍然使用Uri :) – sasjaq

+0

@ErikPhilips:儘管我沒有想太多,但在這種情況下聲明並不正確。 'Uri'不區分這一點。另外,兩者都沒有多大意義,因爲它沒有告訴你域名的有效性 - 無論是頂級域名還是普通域名。如果地址是本地的查詢可能會告訴你更多。 'Uri'的'CheckHostName'也可能有一些幫助 - 我不知道 – skarmats

1

正則表達式爲每一個有效的URL

<?php 

function validateURL($val) { 
    $pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i"; 
    $pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(in|com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";  
    $pattern_3 = "/^(([A-Z0-9][a-zA-Z0-9_-]*)+.(co|in|com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i"; 
    $pattern_4 = "/^(([A-Z0-9][a-zA-Z0-9_-]*)+.(co|in|com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se*)+.(co|in|com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i"; 
    if(preg_match($pattern_1, $val) || preg_match($pattern_2, $val) || preg_match($pattern_3, $val) || preg_match($pattern_4, $val)){ 
    return true; 
    } else{ 
    return false; 
    } 
} 

$url = "google.com.in"; 
echo validateURL($url); 
?> 
+0

用於http和https檢查 –