loading...

Daily Challenge #305 - Remove Anchors from URLs

thepracticaldev profile image dev.to staff ・1 min read

Complete the function/method so that it returns the url with anything after the anchor (#) removed.

Examples

remove_url_anchor('dev.to#about')
returns 'dev.to'

remove_url_anchor('www.telegraph.co.uk/branding')
returns 'www.telegraph.co.uk/branding'

Tests

remove_url_anchor('www.twitter.com?page=1')
remove_url_anchor('www.twitter.com#about')

Good luck!


This challenge comes from jhoffner on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

Discussion

pic
Editor guide
Collapse
cipharius profile image
Valts Liepiņš

Haskell:

remove_url_anchor :: String -> String
remove_url_anchor = takeWhile (/= '#')
Enter fullscreen mode Exit fullscreen mode
Collapse
alfredosalzillo profile image
Alfredo Salzillo

So much beautiful to read.

Collapse
baenencalin profile image
Calin Baenen

Java:

class URL {
    private String url = null;
    public URL(String url) {this.url = url;} // The url.
    public String removeAnchor() {
        if(url != null) return url.split("#")[0]; // Get the part before the anchor.
        return "";
    }
}
Enter fullscreen mode Exit fullscreen mode
Collapse
peter279k profile image
peter279k

Here is the simple solution with parse_url function in PHP:

function replaceAll($string) {
  $parsed = parse_url($string);

  $scheme = $parsed['scheme'] ?? false;

  if ($scheme !== false) {
    return $scheme . '://' . $parsed['host'];
  }

  return $parsed['path'];
}
Enter fullscreen mode Exit fullscreen mode
Collapse
danielt404 profile image
DanielT404

C# solution

class MainClass {

  public static string remove_url_anchor(string url) {
    int anchorFoundAt = url.IndexOf("#", 0, url.Length);
    if(anchorFoundAt == -1) return url;
    return url.Substring(0, anchorFoundAt);
  }

  public static void Main (string[] args) {
    string url = remove_url_anchor("dev.to#about");
    Console.WriteLine(url);
  }
}
Enter fullscreen mode Exit fullscreen mode
Collapse
qm3ster profile image
Mihail Malo

JavaScript

const remove_url_anchor = url => url.split('#', 1)[0]
Enter fullscreen mode Exit fullscreen mode

Second parameter to split means it will stop looking after the first match, and never construct a second string value.

Rust

#![feature(str_split_once)]
fn remove_url_anchor(url: &str) -> &str {
    url.split_once('#').map_or(url, |(x, _)| x)
}
Enter fullscreen mode Exit fullscreen mode

look at it go!

Disclaimer:

In real life, please use developer.mozilla.org/docs/Web/API... or docs.rs/url/ respectively.

These should be fairly bulletproof though, since URL specification doesn't allow unencoded # character anywhere, including notably the <password> section of <protocol>://<user>:<password>@<host>. But where there's fragment, soon will come other parts of the URL.

Collapse
mellen profile image
Matt Ellen

REGEX to the rescue.

function remove_url_anchor(url)
{
  return url.replace(/([^#]*)#.+/, '$1');
}
Enter fullscreen mode Exit fullscreen mode
Collapse
markmead profile image
Mark

In Ruby

def remove_url_anchor(url)
  url.split('#').first
end
Enter fullscreen mode Exit fullscreen mode
Collapse
jffrydsr profile image
Jeffrey Desir

Ha! I love the English like precision in syntax.

Collapse
sabbin profile image
Sabin Pandelovitch

js using split method

const remove_url_anchor = url => url.split('#')[0];
Enter fullscreen mode Exit fullscreen mode
Collapse
jehielmartinez profile image
Jehiel Martinez

JS

removeUrlAnchor = (str) => str.split('#')[0];
Enter fullscreen mode Exit fullscreen mode
Collapse
boris profile image
Boris Quiroz

Python:

def remove_url_anchor(str):
    print(str.split("#")[0])
Enter fullscreen mode Exit fullscreen mode
Collapse
rafi993 profile image
Rafi

SQL (postgres)

SELECT split_part('dev.to#about', '#', 1);
Enter fullscreen mode Exit fullscreen mode
Collapse
annshuk profile image
Annshuk Sharma

const remove_url_anchor =(url) => url && url.split('#')[0];