DevBento logoDevBento
Tools/Regex Tester/URL Regex Pattern: Validate URLs

URL Regex Pattern: Validate URLs

Regex pattern to match and validate HTTP and HTTPS URLs with query strings, fragments, ports, and path segments. Test it live against your own URL samples.

//gm
4 matches
https://example.com https://devbento.dev/tools/regex-tester http://localhost:3000/api/users?page=1&limit=10 https://sub.domain.example.co.uk/path/to/resource#section ftp://not-http.com not a url https://example.com/search?q=hello+world&lang=en
Match Details
Related Tools
%20URL Encoder & HTML Entity Encoder
Encode and decode URLs with encodeURIComponent or encodeURI, and escape HTML special characters to named or numeric entities. Runs locally in your browser.
b64Base64 Encoder / Decoder
Convert audio, PDF, images, and text to Base64 online. Encode files to Base64 strings for APIs, data URIs, and HTML embedding. No upload, runs in browser.

URL Regex Pattern

The pattern above matches HTTP and HTTPS URLs, including paths, query strings, and fragments. It rejects ftp:// schemes and bare strings with no protocol. Of the test strings above, it matches https://example.com, the devbento tool URL, the localhost API with query params, and the subdomain URL with a fragment. It does not match ftp://not-http.com or the plain text string.

Pattern Breakdown

Segment Pattern What it matches
Protocol https?:\/\/ http:// or https://
Host [\w\-]+(\.[\w\-]+)+ Domain name with at least one dot (e.g. example.com, sub.domain.co.uk)
Path, query, fragment ([\w.,@?^=%&:/~+#\-]*[\w@?^=%&/~+#\-])? Optional path and query string, must not end on a punctuation character

The trailing character class is intentionally non-anchored at the end. The second character class inside the group ([\w@?^=%&/~+#\-]) ensures the match does not stop on a trailing period or comma, which avoids capturing punctuation that follows a URL in prose (e.g. “visit https://example.com, then…”).

The URL Constructor as a Validation Alternative

For JavaScript, new URL(input) is the most reliable way to check whether a string is a valid absolute URL:

function isValidUrl(str) {
  try {
    const url = new URL(str);
    return url.protocol === 'http:' || url.protocol === 'https:';
  } catch {
    return false;
  }
}

This handles edge cases the regex does not: IPv6 addresses (http://[::1]:8080/), internationalized domain names after Punycode normalization, and percent-encoded characters in paths. The protocol check filters out javascript:, data:, and other schemes you probably do not want to accept.

Edge Cases the Pattern Does Not Cover

URLs with authentication credentials (http://user:pass@example.com) are not matched because the @ in the userinfo portion confuses the host parsing. URLs with IPv6 addresses (http://[2001:db8::1]/) require bracket handling that adds significant complexity. Unicode domain names (https://münchen.de) must first be converted to Punycode (https://xn--mnchen-3ya.de) before the pattern matches them.

For a production system handling user-submitted URLs, the pattern on this page works well as a first filter, but pass survivors through the URL constructor before storing or fetching.

Extracting URLs from Text

The most practical use of a URL regex is extracting links from logs, markdown, or plain text. When doing this with the g flag, watch for two gotchas: markdown link syntax ([label](https://url)) will include the closing ) in the match, and HTML href attributes may have the URL wrapped in quotes. A post-processing step to strip trailing ), ", or ' covers most of these cases.

If you need to encode URLs before embedding them in HTML or a query string, the URL Encoder handles percent-encoding for you.

🔒

Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.

© 2026 devbento.dev · built local-firstChangelog