Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/vol6_1/byethost16.com/b16_22751756/blog.wesley.com.br/htdocs/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Quem me conhece sabe que sou aficionado por expressões regulares (ER) e vez ou outra me deparo com probleminhas nem tão fáceis de resolver.

O desafio desta vez era separador de milhares.

Resposta em JavaScript:

1
"1234567.89".replace(/\d(?=(?:\d{3})+(?:\D|$))/g, "$&,")

Em linhas gerais, a ER combina APENAS com 1 caractere numérico seguido de grupos de 3 caracteres numéricos seguido de 1 caractere não-numérico ou fim da string.

Três pontos interessantes a ressaltar são o uso do $& e dos grupos (?=…) e (?:…)
Todo o restante da ER é bem básica.

  • O grupo (?:...) é usado para agrupar dados que não devem ser espelhados (RegExp.$1-9).
    Eles foram usados respectivamente para “agrupar agrupamentos” e “quebrar precedência”.
  • O grupo (?=...) é usado para testar a expressão, mas que não deve fazer parte ao resultado final.
  • $& é usado para retornar toda a substring combinada na ER.
    No caso do exemplo, retorna apenas \d que está fora do grupo (?=...).

Alguém pode questionar: Opa, mas estou no Brasil e os pontos decimal e milhar são respectivamente “,” e “.”.

Ok, neste caso eu aconselho fazer o seguinte:

1
"1234567.89".replace(/[.]/g, ",").replace(/\d(?=(?:\d{3})+(?:\D|$))/g, "$&.")

Em breve devo publicar um post falando só de expressões regulares e ponho o link aqui.

Share
Categorias: Programação
Wesley Menezes

4 thoughts on “RegExp: Separador de milhares

  1. victor
    25 de agosto de 2014 às 19:07

    Cara só tenho uma coisa a dizer… Eu amo você….
    Já me falaram que Expreções regulares são muito fodas porém são um diferencial e tanto durante o desenvolvimento.. comecei a fazer uma função pra resolver essa situação e ela estava ficando chata… procurei outras na net e vi que todas estavam indo pela mesma linha de raciocínio, mas com um único comando vc resolveu… Parabéns você me motivou a aprender a utilizar esse recurso foda..

    • Wesley Menezes
      17 de maio de 2015 às 23:39

      Demorei a responder porque na verdade só descobri agora que era possível responder aos comentários do pessoal 🙂 * Completamente iniciante com WordPess *
      Estou com uns posts sobre Expressões Regulares agendados para os próximos meses, conforme prometido no post.
      Fico agradecido por seu comentário.

  2. Vicente
    30 de abril de 2015 às 17:10

    Parabéns Wesley!

    Semalhante ao Victor, estava escrevendo uma função após passar o dia buscando plugins em JQuery que resolvesse isto, considerando também valores negativos. Sua ER resolveu de forma elegante o problema!

    Valeu!

    • Wesley Menezes
      17 de maio de 2015 às 23:36

      Realmente para este caso um plugin do jQuery não seria uma boa alternativa até porque a funcionalidade é bem simples.
      Eu que agradeço ao comentário.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.