2016-08-30 19 views
1

我正在創建一個JavaScript正則表達式來驗證網站的URL。我在stackoverflow社區中搜索了一下,我沒有找到有用的東西。Javascript:使用正則表達式的網站URL驗證

我的正則表達式至今:/(https?:////??wwwwww.??[a-zA-Z0-9]+\.[a-zA-Z]{2,}/摹

但似乎失敗,並帶有兩個通過驗證的網址w ^像ww.test.com

應該通過正則表達式的測試:

http://www.test.com 
https://www.test.com 
www.test.com 
www.test.co.uk 
www.t.com 
test.com 
test.fr 
test.co.uk 

不應該通過的測試正則表達式:

w.test.com 
ww.test.com 
www.test 
test 
ww.test. 
.test 
.test.com 
.test.co.ul 
.test. 

任何建議或想法?

+1

所以'Mr.Bean'也是一個有效的網址? – anubhava

+2

'「ww.test.com」'是一個有效的網站地址 - 爲什麼它不是?所以'www.test-site.com',但你的正則表達式不允許連字符。 – nnnnnn

+0

格式正確的URL和有效的URL是兩個不同的東西 – Aaron

回答

2

即使this回答對於這個問題有點過分,它說明了這個問題:即使有可能創建一個正則表達式來檢查url,但它更加簡單和更健壯以解析URL和「創建一個真實的對象「,通過它可以將整體測試分解爲若干較小的測試。

因此,現代瀏覽器的內建URL構造函數可能會幫助你在這裏(LINK 1,LINK 2)。

一種方法來測試你的URL可能看起來像這樣:

function testURL (urlstring) { 
    var errors = []; 
    try { 
     var url = new URL(urlstring); 

     if (!/https/.test(url.protocol)) { 
      errors.push('wrong protocol'); 
     } 

     //more tests here 

    } catch(err) { 
     //something went really wrong 
     //log the error here 

    } finally { 
     return errors; 
    } 
} 


if (testURL('mr.bean').length == 0) { runSomething(); } 
+0

也適用於不太現代的瀏覽器[* XMLHttpRequest *](http://stackoverflow.com/questions/10926880/using-javascript-to-detect-whether-the-url-exists-before-display-in-iframe/ 10926978#10926978)。 ;-) – RobG

+0

感謝那@ philipp。由於使用正則表達式測試整個網址是不可能的,所以使用這種方式我將根據我的要求測試url的特定部分。 – Panagiotis

0
/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/g 
+0

解釋會很有用? – Liam