最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - validate url and check if url is domain or subdomain - Stack Overflow

programmeradmin2浏览0评论

I need to validate the URL and check if URL entered is domain or subdomain.
I tried a solution, it work but in some scenario it failed.

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);
}

Results:

 
mydomain -> false 

subdomain.mydomain -> true

mydomain. -> true

I need to validate the URL and check if URL entered is domain or subdomain.
I tried a solution, it work but in some scenario it failed.

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);
}

Results:

 
mydomain. -> false 

subdomain.mydomain. -> true

mydomain.. -> true
Share Improve this question edited Feb 1, 2013 at 11:15 Ofir Farchy 8,0477 gold badges41 silver badges58 bronze badges asked Feb 1, 2013 at 10:59 KevinKevin 7692 gold badges10 silver badges27 bronze badges 4
  • What results did you expect? – William Buttlicker Commented Feb 1, 2013 at 11:02
  • 1 I guess mydomain.. to be false... – Seimen Commented Feb 1, 2013 at 11:02
  • So he got it the first tym i guess – William Buttlicker Commented Feb 1, 2013 at 11:03
  • it should show false for " mydomain.. " it invalid url and also not subdomain – Kevin Commented Feb 1, 2013 at 11:13
Add a ment  | 

2 Answers 2

Reset to default 9

You can actually test this in one regex, example:

var isSubdomain = function(url) {
    url = url || 'http://www.test-domain.'; // 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."));
console.log(isSubdomain("http://example.:4000"));
console.log(isSubdomain("www.example.:4000"));
console.log(isSubdomain("https://www.example."));
console.log(isSubdomain("sub.example."));
console.log(isSubdomain("example.co.uk")); //it doesn't work on these very specific cases

You can just use URI to do it. https://medialize.github.io/URI.js/docs.html

const subdomain = new URI('https://stackoverflow./questions/14644805/validate-url-and-check-if-url-is-domain-or-subdomain').subdomain()

subdomain // Will be an empty string if no subdomain exists

then just use it in a function

function isSubdomain(url) {
  return Boolean(new URI(url).subdomain())
}
发布评论

评论列表(0)

  1. 暂无评论