Regex para URL (http e https)

Use /^https?:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/ para verificar se uma string inteira é uma URL (http e https) válida. Todos os exemplos abaixo foram testados contra o padrão, e você pode abri-los no Testador de Regex com as amostras já carregadas.

Atualizado em

/^https?:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/
Abrir no Testador de Regex
EntradaResultado
https://example.com✓ Corresponde
http://sub.example.co.uk:8080/path?q=1#top✓ Corresponde
https://devpack.app/regex-tester✓ Corresponde
example.com✗ Não corresponde
ftp://example.com✗ Não corresponde
https://localhost✗ Não corresponde
http://exa mple.com✗ Não corresponde

Como o padrão funciona

ParteSignificado
^https?Começa com http, seguido opcionalmente de s
:\/\/O literal :// (barras escapadas para regex literais em JavaScript)
[A-Za-z0-9.-]+Nome do host e subdomínios
\.[A-Za-z]{2,}Um ponto e um domínio de nível superior com duas ou mais letras
(?::\d{1,5})?Uma porta opcional, como :8080
(?:\/[^\s]*)?Um caminho, query string e fragmento opcionais — qualquer coisa até um espaço em branco
$Fim da string

Exemplos de código

JavaScript

const re = /^https?:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'https?://[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d{1,5})?(?:/[^\s]*)?', value))

PHP

preg_match('/^https?:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/', $value) === 1;

Observações e limitações

Para validação em JavaScript, new URL(value) dentro de um try/catch é mais rigoroso e cobre todos os casos extremos; use a regex quando também quiser exigir http(s) e um domínio com cara de público. Ela rejeita localhost e endereços IP soltos de propósito.

Perguntas frequentes

Qual é a regex para URL (http e https)?
/^https?:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/ — ela corresponde à string inteira. Veja a tabela acima para entender o que cada parte faz.
Quais exemplos correspondem?
Dos exemplos testados, estes correspondem: https://example.com, http://sub.example.co.uk:8080/path?q=1#top, https://devpack.app/regex-tester. Os outros não.
Como testo essa regex?
Clique em “Abrir no Testador de Regex” — o padrão, as flags e o texto de exemplo são carregados automaticamente, e as correspondências são destacadas enquanto você edita.