2013-02-01 64 views
3

我需要验证网址并检查输入的URL是域名还是子域名。
我试过一个解决方案,它的工作,但在某些情况下,它失败了。验证网址并检查url是域名还是子域名

function subDomain(url) 
{ 

    // IF THERE, REMOVE WHITE SPACE FROM BOTH ENDS 
    url = url.replace(new RegExp(/^\s+/),""); // START 
    url = url.replace(new RegExp(/\s+$/),""); // END 

    // IF FOUND, CONVERT BACK SLASHES TO FORWARD SLASHES 
    url = url.replace(new RegExp(/\\/g),"/"); 

    // IF THERE, REMOVES 'http://', 'https://' or 'ftp://' FROM THE START 
    //url = url.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/\//i),""); 

    // IF THERE, REMOVES 'www.' FROM THE START OF THE STRING 
    url = url.replace(new RegExp(/^www\./i),""); 

    // REMOVE COMPLETE STRING FROM FIRST FORWARD SLASH ON 
    url = url.replace(new RegExp(/\/(.*)/),""); 

    // REMOVES '.??.??' OR '.???.??' FROM END - e.g. '.CO.UK', '.COM.AU' 
    if (url.match(new RegExp(/\.[a-z]{2,3}\.[a-z]{2}$/i))) { 
     url = url.replace(new RegExp(/\.[a-z]{2,3}\.[a-z]{2}$/i),""); 

    // REMOVES '.??' or '.???' or '.????' FROM END - e.g. '.US', '.COM', '.INFO' 
    } else if (url.match(new RegExp(/\.[a-z]{2,4}$/i))) { 
     url = url.replace(new RegExp(/\.[a-z]{2,4}$/i),""); 
    } 

    // CHECK TO SEE IF THERE IS A DOT '.' LEFT IN THE STRING 
    var subDomain = (url.match(new RegExp(/\./g))) ? true : false; 
    return(subDomain); 
} 

结果:

 
mydomain.com -> false 

subdomain.mydomain.com -> true 

mydomain.com. -> true 
+0

你期望什么样的结果? –

+1

我猜mydomain.com。是假的... – Simon

+0

所以他得到它的第一个tym我猜 –

回答

3

实际上,你可以在一个正则表达式,例如测试:

var isSubdomain = function(url) { 
 
    url = url || 'http://www.test-domain.com'; // just for the example 
 
    var regex = new RegExp(/^([a-z]+\:\/{2})?([\w-]+\.[\w-]+\.\w+)$/); 
 

 
    return !!url.match(regex); // make sure it returns boolean 
 
} 
 

 
console.log(isSubdomain("example.com")); 
 
console.log(isSubdomain("http://example.com:4000")); 
 
console.log(isSubdomain("www.example.com:4000")); 
 
console.log(isSubdomain("https://www.example.com")); 
 
console.log(isSubdomain("sub.example.com")); 
 
console.log(isSubdomain("example.co.uk")); //it doesn't work on these very specific cases

+0

即时通讯javascript专家你可以添加一个小例子使用你的代码。感谢 – Kevin

+0

我想这和它总是返回null VAR URL = “sub.mydomain.com” 变种N = url.match(/^\ w + \:\/{2}(\ w + \ \ W + ){2} $ /); alert(n); – Kevin

+0

成功测试我的例子在萤火虫控制台。 – Simon