2017-02-14 44 views
1

我正在試圖驗證url正則表達式 並添加「http://」(如果它同時缺失)。 我對Javascript和編碼很陌生,以下代碼 的大部分內容都是我遵循Youtube教程的內容。使用正則表達式進行URL驗證,並在缺少時添加「http://」

但我想添加一個功能預先考慮的「http://」當它是因爲與當前正則表達式失蹤, ,既「www.google.com」和「http://www.google.com」 是有效的。與此問題是,當我實際點擊訪問該網站, 在開始時沒有「http://」保存的網站,不去該網站。

function validateForm(siteName, siteUrl) { 
    if(!siteName || !siteUrl) { 
     alert('Please fill in the form'); 
     return false; 
    } 


    var expression = /[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi; 
    var regex = new RegExp(expression); 
    var result = siteUrl.search(new RegExp(/^http:\/\//i)); 

    if(!siteUrl.match(regex)) { 
     alert('Please use a valid URL'); 
     return false; 
    } 
    else if(siteUrl.match(regex) && !result) { 
     siteUrl = "http://" + siteUrl 
     return true; 
    } 
    else { 
     return true; 
    } 
} 

回答

2

可以使用.indexOf()字符串的方法來確定是否http://是在字符串的開頭。但是,如果URL需要https://,則可能會遇到http://之前的問題。

else if(siteUrl.match(regex) && !result) { 

    // Check to see if the string starts with "http://" 
    // indexOf() returns the index position of the supplied 
    // string argument within the string. 
    if(siteUrl.indexOf("http://") !== 0){ 
     siteUrl = "http://" + siteUrl 
    } 
    return true; 
} 

而且(如@m_callens在下面的評論中指出的),你siteUrl變量函數的參數,所以你將無法從函數以外訪問它。相反,你不應該把它傳遞到所有的功能,只是它在一個較高的範圍內聲明:

var siteUrl = // Code that initializes the variable 

function validateForm(siteName) { 
    if(!siteName || !siteUrl) { 
     alert('Please fill in the form'); 
     return false; 
    } 


    var expression = /[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi; 
    var regex = new RegExp(expression); 
    var result = siteUrl.search(new RegExp(/^http:\/\//i)); 

    if(!siteUrl.match(regex)) { 
     alert('Please use a valid URL'); 
     return false; 
    } 
    else if(siteUrl.match(regex) && !result) { 
     // Check to see if the string starts with "http://" 
     // indexOf() returns the index position of the supplied 
     // string argument within the string. 
     if(siteUrl.indexOf("http://") !== 0){ 
      siteUrl = "http://" + siteUrl 
     } 
    } 
    else { 
     return true; 
    } 
} 
+0

怎麼樣的問題,他是試圖改變一個變量,'siteUrl',對於外界的範圍時,它是隻有當地的功能 –

+0

這是一個好點(但是,問題不是問)。我會更新我的答案來解決它。 –

+0

此外,不存在子字符串的索引是-1,但是,如果索引等於0,則預先計劃。 –