Regex brasileiros · Biblioteca de padrões

Regex de valor em reais (R$)

Regex de valor em reais com prefixo R$, milhar com ponto e vírgula decimal com duas casas, como R$ 1.234,56. Serve para achar e conferir valores em texto.

O padrão

R\$\s?(?:\d{1,3}(?:\.\d{3})*|\d+),\d{2}

Flags: nenhuma. Sem âncoras: para validar um campo inteiro use ^(?:padrão)$.

Só o formato. Este regex confere a aparência do texto. Ele não prova que o dado existe nem que os dígitos verificadores estão certos. Para isso use Conversor de número brasileiro.

Teste na hora

Tudo roda no seu navegador; nada do que você digita é enviado.

Exemplos

Casam

  • R$ 1.234,56
  • R$0,99
  • R$ 10,00
  • R$ 1234567,89

Não casam

  • R$ 1,234.56
  • R$ 1.23,45
  • 1.234,56
  • R$ 12,3
  • R$ -5,00

Como funciona, por partes

Armadilhas

Código pronto

JavaScript

const re = new RegExp("^(?:R\\$\\s?(?:\\d{1,3}(?:\\.\\d{3})*|\\d+),\\d{2})$");
console.log(re.test(texto.trim()));

Python

import re

re_valor_em_reais = re.compile(r"R\$\s?(?:[0-9]{1,3}(?:\.[0-9]{3})*|[0-9]+),[0-9]{2}")
print(bool(re_valor_em_reais.fullmatch(texto.strip())))

C#

using System.Text.RegularExpressions;

var re = new Regex(@"^(?:R\$\s?(?:[0-9]{1,3}(?:\.[0-9]{3})*|[0-9]+),[0-9]{2})\z");
bool ok = re.IsMatch(texto.Trim());

Perguntas frequentes

Como extrair todos os valores de um texto?

Use o regex sem âncoras e a flag g. Em JavaScript, texto.match(regex) devolve todos os valores encontrados. Depois converta cada um em centavos antes de somar.

Por que dois formatos de parte inteira?

Porque há quem escreva o milhar com ponto e quem escreva o número corrido. Aceitar os dois ajuda em textos reais, mas não aceita pontos fora de lugar, como 1.23.456.

E se o valor não tiver centavos?

Este padrão exige a vírgula e dois dígitos. Para aceitar R$ 10, torne a parte decimal opcional com (?:,\d{2})?, sabendo que isso também deixará passar números inteiros longos.

Como lidar com espaços estranhos?

Textos copiados de PDFs podem trazer o espaço sem quebra (código 160) entre o R$ e o número. O \s do padrão já cobre esse caso em JavaScript, mas confira o comportamento na linguagem que você usa.

Ferramentas

← Ver todos os padrões