2013-07-18 288 views
5

我試圖檢查url是否有效。 7,8的檢查返回錯誤的輸出。檢查url是否有效

alert('1: ' + learnRegExp('http://www.google-com.123.com')); // true 
alert('2: ' + learnRegExp('http://www.google-com.123')); // false 
alert('3: ' + learnRegExp('https://www.google-com.com')); // true 
alert('4: ' + learnRegExp('http://google-com.com')); // true 
alert('5: ' + learnRegExp('http://google.com')); //true 
alert('6: ' + learnRegExp('google.com')); //true 
alert('7: ' + learnRegExp('ww.google.com')); //false -> it returns true 
alert('8: ' + learnRegExp('www.google.co.il')); //true -> it returns false 
alert('9: ' + learnRegExp('http://ww.google.co.il')); //false 
alert('10: ' + learnRegExp('https://ww.google.co.il')); //false 

function learnRegExp(){ 
    return /((ftp|https?):\/\/)?(www\.)?[a-z0-9\-\.]{3,}\.[a-z]{3}$/ 
    .test(learnRegExp.arguments[0]); 
} 

請幫我解決它。

任何幫助讚賞!

+4

記住'www'只是一個子域。我不打算在正則表達式中明確地包含它。 –

+1

很多東西都可以成爲一個有效的URL,例如'http:// xyz.mysite.org.ru'我想真正的測試會嘗試並加載它 –

+1

https://gist.github.com/dperini/729294 – naomik

回答

7

試試這個:

function learnRegExp(s) {  
     var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; 
     return regexp.test(s);  
} 
+5

不幸的是,對於learnRegExp(「http:// fgsdfjgd」),這應該是'false' – patrick

0

問題的圖7是(www\.)?是允許0或1 www.[a-z0-9\-\.]允許.因爲它是唯一ww.然後(www\.)?把它當作0和[a-z0-9\-\.]捕獲ww.

問題的圖8是\.[a-z]{3}只允許.com.net等它迫使最後.後面的字符串是3個字符長。由於它只有2個字符,所以不匹配。

不要試圖重新發明輪子:What is the best regular expression to check if a string is a valid URL?

+2

不幸的是,該頁面上的RegExp使用的是PHP,而不是JavaScript中的請求... – patrick