English 中文(简体)
How to detect whether a string is in URL format using javascript?
原标题:

I think the question title seems to explain eveything. I want to detect whether a string is in URL format or not using javascript.

Any help appreciated.

最佳回答

Try this-

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

usage: if (isUrl("http://www.page.com")) alert("is correct") else alert("not correct");

问题回答
function IsURL(url) {

    var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
        + "?(([0-9a-z_!~* ().&=+$%-]+: )?[0-9a-z_!~* ().&=+$%-]+@)?" //ftp的user@
        + "(([0-9]{1,3}.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
        + "|" // 允许IP和DOMAIN(域名)
        + "([0-9a-z_!~* ()-]+.)*" // 域名- www.
        + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." // 二级域名
        + "[a-z]{2,6})" // first level domain- .com or .museum
        + "(:[0-9]{1,4})?" // 端口- :80
        + "((/?)|" // a slash isn t required if there is no file name
        + "(/[0-9a-z_!~* ().;?:@&=+$,%#-]+)+/?)$";
     var re=new RegExp(strRegex);
     return re.test(url);
 }

Regular expression visualization

Debuggex Demo (Improved version which matches also localhost )

try something like this:

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

One for the future using the URL constructor and a basic try catch statement, it is supported in most modern browsers. Obviously no IE support...

const isUrl = (str) => {
  try {
    new URL(str);
    return true;
  } catch () {
    return false;  
  }
}

If the URL is valid it will get parsed by the constructor and return true.

If the string is not a valid URL the constructor will chuck a syntax error that will get caught and return false.

Try this code. This expression is more complete and takes into account IP address:

function checkUrl(s) {
     var regexp = /^(?:http(s)?://)?[w.-]+(?:.[w.-]+)+[w-._~:/?#[]@!$& ()*+,;=.]+$/
     return regexp.test(s); }

You can use a regular expression for checking the string

^s?https?://[-_.!~* ()a-zA-Z0-9;/?:@&=+$,%#]+$  

Regular Expressions and Javascript

Had the same task, but all of regex that I found online to check validity of a URL were failed in some test cases.

Here is the regex that worked everything:

/^(http://www.|https://www.|www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(/.*)?/

However, If the URL was like: google.com It accepted it as valid (which in my specific case, was considered as invalid)

It worked the best I had found. Worked like a charm!

When given the option, I prefer the simplest solution.

Use _.startsWith(string, http ) if:

  • You don t mind if URL is invalid
  • You re sure the URL being checked will always start with http
  • You don t expect the string to be another value that might start also with http




相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签