Informe o seu número de telefone (com código de área) e então clique em "Check".
O formato esperado é ###-###-####.
REGEX

************************************************
Count % of Text Symbols
1 caracteres 405 2.4 % 10
2 caractere 383 2.0 % 9
3 para 351 0.8 % 4
4 regex 286 0.8 % 5
5 exemplo 228 0.9 % 7
6 expressão 204 1.1 % 9
7 como 190 0.4 % 4
8 string 185 0.7 % 6
9 mais 181 0.4 % 4
10 regular 171 0.7 % 7
********************************************
resultado google
São caracteres que determinam funções especiais dentro de uma regex. Eles são os blocos de construção de um regex. Por exemplo: [ ] , ^ , ( ) , { } , $ , + , * , etc.7 de ago. de 2020
Expressões Regulares (RegEx) | Réulison Silva
https://reulison.com.br › regex
Sobre trechos em destaque
•
Feedback
As pessoas também perguntam
O que é padrão regex?
Resultado de imagem para regex caracteres especiais - O que é padrão regex?
Uma expressão regular, ou Regex, são padrões utilizados para identificar determinadas combinações ou cadeias de caracteres em uma string. Ela faz parte do dia a dia de todos os programadores e administradores de infra.
RegEx: O que é, Como usar em Palavras e Números | Alura
https://www.alura.com.br › expressoes-regulares
Pesquisar: O que é padrão regex?
O que são classes de caracteres em expressões regulares?
Uma classe de caracteres define um conjunto de caracteres, qualquer dos quais pode ocorrer em uma cadeia de caracteres de entrada para que uma correspondência seja bem-sucedida. A linguagem de expressões regulares no . NET dá suporte às seguintes classes de caracteres: Grupos de caracteres positivos.23 de jun. de 2022
Classes de caracteres em expressões regulares do .NET
https://docs.microsoft.com › pt-br › standard › base-types
Pesquisar: O que são classes de caracteres em expressões regulares?
Qual a função das expressões regulares regex )?
Expressões regulares são padrões utilizados para selecionar combinações de caracteres em uma string. Em JavaScript, expressões regulares também são objetos. Elas podem ser utilizadas com os métodos exec e test do objeto RegExp , e com os métodos match , replace , search , e split do objeto String .22 de fev. de 2022
Expressões Regulares - JavaScript - MDN Web Docs
https://developer.mozilla.org › ... › Guia JavaScript
Pesquisar: Qual a função das expressões regulares regex )?
O que é validação regex?
Um RegEx, ou Expressão Regular, é uma sequência de caracteres que forma um padrão de texto. RegEx pode ser usado para verificar se uma cadeia de caracteres contém o padrão de busca especificado.
Validação RegEx | QuestionPro Base de conhecimento
https://www.questionpro.com › help › regex-validation
Pesquisar: O que é validação regex?
Como fazer um Regex?
Part of a video titled Como usar RegEx? | Expressões Regulares - YouTube
2:02
10:31
Clipe sugerido · 58 segundos
Como usar RegEx? | Expressões Regulares - YouTube
https://www.youtube.com › watch
Pesquisar: Como fazer um Regex?
O que é uma Regex JavaScript?
Uma expressão regular (regular expression ou Regex) é uma sequência de caracteres que forma um padrão de pesquisa. Ao procurar dados em um texto, você pode usar esse padrão de pesquisa para descrever o que está procurando. Uma expressão regular pode ser um único caractere ou um padrão mais complicado.14 de jun. de 2018
Como usar o Regex no JavaScript - MundoJS
https://www.mundojs.com.br › 2018/06/14 › como-usar-o...
Pesquisar: O que é uma Regex JavaScript?
O que significa a expressão regular?
Expressões Regulares são padrões de caracteres que associam sequências de caracteres no texto. Podemos usar expressões regulares para extrair ou substituir porções de texto, bem como, endereço ou link de imagens em uma página HTML, modificar formato de texto ou remover caracteres inválidos.
Sintaxes Básicos em Expressões Regulares - DevMedia
https://www.devmedia.com.br › iniciando-expressoes-reg...
Pesquisar: O que significa a expressão regular?
Como negar uma expressão regular?
Qual a expressão regular deve ser aplicada para o formato correto de um CPF?
Como usar expressão regular no Excel?
Como validar uma string com Regex?
Como validar o CPF no Google Forms?
Como validar CPF em C#?
Como validar CEP com javascript?
Como fazer Regex php?
Como usar Regex em Java?
Como usar Regex em Python?
O que é uma flag JavaScript?
O que é em JavaScript?
Como validar uma string em JavaScript?
O que é um trabalho regular?
O que é trabalhar regularmente?
Feedback
Expressões Regulares - JavaScript - MDN Web Docs
https://developer.mozilla.org › ... › Guia JavaScript
22 de fev. de 2022 — Caracteres especiais utilizados em expressões regulares. ... Note que \1, \2, \n são utilizados na parte correspondente do regex.
Você visitou esta página em 09/07/22.
Sintaxes Básicos em Expressões Regulares - DevMedia
https://www.devmedia.com.br › Artigos › .NET
NET a classe Regex representa uma expressão regular imutável. ... Segue uma breve descrição dos caracteres especiais mais utilizados em expressão regular.
Você visitou esta página em 09/07/22.
RegEx: O que é, Como usar em Palavras e Números | Alura
https://www.alura.com.br › expressoes-regulares
é um caractere especial e significa qualquer caractere. Ou seja, a Regex não interpreta o ponto literalmente e sim faz um match para qualquer *char. *.
Regex: Um guia prático para expressões regulares - Medium
https://medium.com › xp-inc › regex-um-guia-pratico-...
31 de jan. de 2020 — Uma expressão regular é um método formal de se especificar um padrão de texto. Com ela podemos lidar com as seguintes situações: procura; ...
Classes de caracteres em expressões regulares do .NET
https://docs.microsoft.com › pt-br › standard › base-types
23 de jun. de 2022 — MatchCollection matches = Regex.Matches(input, pattern); foreach (Match match in matches) Console.WriteLine($"'{match.
Você visitou esta página em 09/07/22.
Linguagem de expressões regulares – referência rápida
https://docs.microsoft.com › pt-br › standard › base-types
23 de jun. de 2022 — Um padrão tem um ou mais literais de caracteres, operadores ou ... da cadeia de caracteres original e, em seguida, é executado Regex.
Regex caracteres especiais obrigatório - java - Stack Overflow
https://pt.stackoverflow.com › questions › regex-caracte...
1 de dez. de 2018 — Este código exibe true no console quando for um padrão válido, e false para padrões inválidos. Você pode testar esse código no JavaFiddle como ...
2 respostas
· Melhor resposta: Regex Usada Essa regex faz a validação, você pode testa-la aqui: (?=.*[}{,.^?~=+\-_\/*\-+.\|])( ...
Regex - Remoção de Caracteres Especiais C# - Stack Overflow
19 de jul. de 2014
Verificar a existência de caracteres especiais em uma string ...
11 de nov. de 2018
Como validar com regex uma string contendo apenas letras ...
15 de nov. de 2015
Como extrair apenas a última sequência de palavras depois ...
22 de set. de 2021
Mais resultados de pt.stackoverflow.com
Você visitou esta página em 09/07/22.
Expressões regulares: introdução — Mini Tutorial RegEx
http://turing.com.br › material › regex › introducao
O termo em inglês é regular expression de onde vem as abreviações regex e re (o ... é um caractere ou sequência de caracteres com significado especial em ...
Expressões Regulares (RegExp) - Documentação - GoCache
https://docs.gocache.com.br › smart_rules-regexp
RegExp. Expressões regulares, também conhecidas como RegEx ou RegExp são usadas para englobar um padrão de caracteres usando alguns caracteres especiais. Na ...
As pessoas também perguntam
Como validar uma string com Regex?
Como usar Regex em Java?
Como fazer Regex php?
Feedback
Pesquisas relacionadas
regex caracteres especiais javascript
regex espaço em branco
regex caracteres especiais python
regex exemplos
regex para pegar um texto entre
regex javascript
regex documentation
regex qualquer caractere
1
2
3
4
5
6
7
8
9
10
Mais
Brasil
Porto Alegre, RS
- Com base na sua atividade anterior
- Atualizar local
AjudaEnviar feedbackPrivacidadeTermos
**************************************************************************************
Neste artigo eu vou tentar explicar o básico sobre expressões regulares, vou direcionar o conteúdo para o uso no Google Analytics e Tag Manager.
O que são Expressões Regulares?
O que são Metacaracteres?
Tipos de Expressões Regulares
Quais são as vantagens de usar o REGEX no Google Analytics?
Construindo uma expressão regular
Detalhando as Expressões Regulares
Invertendo Regex em JavaScript
Testando as expressões regulares (RegEx)
Muitos profissionais de Ciência de dados, Analistas e Programadores precisam lidar com expressões regulares em algum momento. Essa linguagem exótica é usada para encontrar padrões complexos de texto e pode parecer complicada e intimidadora no início. No entanto, as expressões regulares são uma ferramenta poderosa que requer apenas um pequeno investimento de tempo para aprender.
Expressões Regulares são quase universais, e são capazes de lidar com quase todos os tipos de dados. Várias plataformas de análise de dados e linguagens de programação as suportam, incluindo SQL, Python, R, Alteryx, Tableau, LibreOffice, Java, Scala, .NET e Go. Os principais editores de texto e IDEs, como o Atom Editor, o Notepad ++, o Emacs, o Vim, o Intellij IDEA e o PyCharm também suportam a pesquisa de arquivos com expressões regulares.
E ferramentas conhecidas como: Google Analytics, Tag Manager, Optimizer e muitas outras.
O grande suporte das expressões regulares significa que elas pode ser usadas em quase todos os tipos de sistemas, surpreendentemente elas não têm uma curva de aprendizado muito grande. Se você se encontra escaneando documentos manualmente ou analisando substrings apenas para identificar padrões de texto, talvez seja legal aprender. Especialmente nas áreas de Ciência e Engenharia de dados, elas podem ajudar em muitas tarefas, desde organizar os dados, até qualificá-los e classificá-los.
Neste artigo também irei comentar sobre alguns recursos das expressões regulares para ajudar na grande maioria das tarefas que você pode se deparar.
O que são Expressões Regulares?
Expressões Regulares são usadas para identificar um padrão em uma string. É uma forma matemática usada para calcular e identificar certos caracteres usados para definir padrões numa cadeira de caracteres, também chamadas de strings.
As Expressões Regulares também são conhecidas como regex (regular expressions).
Por exemplo, ^Flor?es$ é uma expressão regular que corresponde as duas strings: flor e flores.
Um regex é composto de caracteres e metacaracteres.
O regex usado neste artigo é para JavaScript.
Se você desejar testar e aprender Expressões Regulares mais a fundo saiba mais neste link.
O que são Metacaracteres?
São caracteres que determinam funções especiais dentro de uma regex. Eles são os blocos de construção de um regex.
Por exemplo: [ ], ^, ( ), { }, $, +, *, etc.
Tipos de Expressões Regulares
Os tipos de sintaxe usadas para construir expressões regulares são chamadas de regex engines (mecanismos de expressão regular), ou seja, são usadas na sua implementação.
Existem muitos tipos de regex engines disponíveis. Os mais populares entre eles são:
PCRE (PHP)
JavaScript
Python
Golang
Cada mecanismo interpreta e suporta diferentes formas de sintaxe e o significado dos metacaracteres pode mudar dependendo do mecanismo de regex que está sendo usado.
O mecanismo de expressão regular no JavaScript define um conjunto específico de caracteres para serem interpretados como “palavras”. Qualquer caractere que não esteja neste conjunto é considerado uma “quebra de palavra”. Este conjunto de caracteres é bastante limitado: consiste apenas no alfabeto romano tanto maiúsculo como minúsculo, digítos decimais, e o caractere underline. Caracteres com acento, tal como “é” ou “ã” são, infelizmente, tratados como “palavras quebradas”.
Portanto, uma expressão regular considerada válida em um regex engine pode não ser considerada válida em outro regex engine. Entendeu?
Sempre que você testar uma regex usando uma ferramenta de teste para regex, terá a opção de selecionar o mecanismo com o qual você deseja testar sua expressão regular:
Ferramenta de testes para expressões regulares
O mecanismo de expressão regular usado pelo Google Analytics e pelo Tag Manager é o JavaScript, você deve sempre selecionar JavaScript para testar suas expressões regulares para o GA/GTM.
Quais são as vantagens de usar o REGEX no Google Analytics?
Existem muitos casos em que expressões regulares são úteis no Google Analytics. Alguns desses casos são:
Configurar uma meta que deve corresponder a várias páginas:
Expressão Regular como meta no Google Analytics
Configurar um funil em que uma etapa deve corresponder a várias páginas
Na verdade, quando você configura um funil, todas as URLs são tratadas como expressões regulares:
Usando expressão regular para criar um funil de meta no Google Analytics
Usando filtros para excluir tráfegos de IPs
De fato, existem muitos filtros que exigem expressões regulares. Grandes empresas geralmente possuem um largo intervalo de endereços IP.
Portanto, para filtrar o tráfego interno da empresa, você precisa especificar um intervalo de IP através de uma regex:
Filtro interno de IP usando Regex
Configurar segmentos personalizados complexos, como os segmentos que podem corresponder a palavras-chave de marca
Segmento Customizado para palavras-chaves no Google Analytics
Nesse segmento acima eu defino todas as buscas que contém apenas 1 palavra, ou seja, uma string.
Entendendo o valor das palavras-chaves de cauda longa
Segmento Customizado para palavras-chave de cauda longa
Na imagem acima conseguimos ver o tráfego separado por número de strings na consulta, ou seja, podemos analisar a profundidade da cauda longa. Para funcionar é necessário excluir as strings (not set), (not provided) ou outras definidas por padrão no Googla Analytics da amostragem na hora de montar o segmento.
Outra dica é você excluir as strings que contenham sua marca (branded search) e criar um outro segmento somente para consultas que contenham o nome de sua marca.
Reescrevendo URLs nos relatórios do Google Analytics
Por exemplo, incluindo o dominio (host) na URI da solicitação: filtro-dominio-uri
Filtro para incluir o nome do host na URI de soliticação
Você também pode reescrever URLs nos relatórios do Google Analytics com o filtro avançado Pesquisar e Substituir.
Ele é útil quando seu website possui URLs dinâmicas muito longas e desagradáveis, e você não consegue descobrir sobre o que trata a página apenas observando a URL.
Por exemplo, com o filtro avançado Pesquisar e substituir, você pode solicitar ao GA que substitua a seguinte URL:
https://www.exemplo.com/produtos/?cat=2341&pid=428
Por:
https://www.exemplo.com/jardim/vasos/
Assim o time de Marketing poderá identificar melhor as áreas do site na hora de criar relatórios.
Filtrar dados baseados em padrões complexos nos relatórios do Google Analytics
Por exemplo, a regex a seguir pode segmentar todo o tráfego de mídias sociais:
twitter\.com|facebook\.com|linkedin\.com|plus\.google\.com|reddit\.com|instagram\.com|youtube\.com|stackoverflow\.com|quora\.com
Filtro avançado usando regex para identificar algumas mídias sociais
Encontrando a origem de SPAM no Google Analytics
Por exemplo, você pode usar a seguinte regex (não é infalível) para filtrar todas as origens de SPAM no relatório Referrals:
127.0.0.1|justprofit.xyz|nexus.search-helper.ru|rankings-analytics.com|videos-for-your-business|adviceforum.info|video—production|success-seo|sharemyfile.ru|seo-platform|dbutton.net|wordpress-crew.net|rankscanner|doktoronline.no|o00.in
Filtro avançado usando regex para identificar alguma origens de SPAMERS
Bloquear origens de SPAM através de um Filtro personalizado no Google Analytics
Se você conseguiu identificar as origens de alguns SPAMERS em seus relatórios você pode bloquear que essas referências para que não sejam contabilizadas nos relatórios do Google Analytics:
Filtro excluindo a referência de spamers no Google Analytics
Usando expressões regulares para criar grupos de conteúdo no Google Analytics
Na imagem podemos usar uma regex na criação de uma grupo de conteúdo para acompanhar uma determinada categoria em um e-commerce.
Usando regex para criar grupos de conteúdo no Google Analytics
Usando expressões regulares para criar agrupamento de canais no Google Analytics
No caso eu posso agrupar os canais parceiros de Link Building, mas também pode ser usado para outros vários propósitos.
Agrupamento de canais usando expressão regular no Google Analytics
Usando expressões regulares para rastrear pesquisas realizadas sem o parâmetro de consulta na URL
Observe a seguinte URL:
https://www.americanas.com.br/busca/tv-65-polegadas-4k
Ao realizar uma busca nas Lojas Americanas o sistema não gera parâmetros de busca na URL, ela gera uma URL totalmente nova.
Você poderia usar a seguinte expressão regular:
\/busca\/(.*)
Regex para selecionar apenas URLs geradas a partir de uma busca
Para analisar todas as buscas seria necessário criar uma variável usando o Tag Manager e enviar para o Google Analytics, mas caso haja interesse eu escrevo sobre isso em um outro artigo.
Quais são as vantagens de usar o REGEX no Tag Manager?
Através de expressões regulares você pode configurar triggers (acionadores ou disparadores) avançados:
Se você quiser ter um Trigger para vários eventos personalizados, poderá usar uma regex com o nome do evento. Aqui, a regex faz distinção entre maiúsculas e minúsculas, portanto, tenha cuidado com os valores inseridos.
Usando regex para criar um “acionador” no Tag Manager
Você pode usar esse Trigger para acionar um evento ou função para criar um Público de perfis compradores no seu e-commerce.
Construindo uma expressão regular
Classe de caracteres
CARACTERE SIGNIFICADO
. (O ponto) corresponde um único caracter qualquer exceto os caracteres de nova linha: \n, \r, \u2028 ou \u2029. Note que a flag MULTILINE m não muda o comportamento do ponto. Então para corresponder um padrão por múltiplas linhas, o conjunto de caracteres [^] pode ser usado, que corresponderá qualquer caractere, incluindo novas linhas. Por exemplo, /.y/ corresponde my e ay, mas não yes, em yes make my day.
\d Corresponde um caractere de dígito no alfabeto (Latim). Equivalente a [0-9]. Por exemplo, /\d/ ou/[0-9]/ corresponde 2 em B2 é o número da suíte.
\D Corresponde qualquer caractere que não é um dígito no alfabeto baseado no Latim. Equivalente a [^0-9]. Por exemplo, /\D/ ou /[^0-9]/ corresponde B em B2 é o número da suíte.
\w Corresponde qualquer caractere alfanumérico do alfabeto baseado no Latim, incluindo o underline. Equivalente a [A-Za-z0-9_]. Por exemplo, /\w/ corresponde a em apple, 5 em $5.28, e 3 em 3D.
\W Corresponde qualquer caractere que não é um alfanumérico do alfabeto baseado no Latim. Equivalente a [^A-Za-z0-9_]. Por exemplo, /\W/ ou /[^A-Za-z0-9_]/corresponde % em 50%.
\s Corresponde um único caractere de espaço em branco, incluindo espaço, tabulação (tab), quebra de página, nova linha (LF) e outros espaços Unicode. Equivalente a: [\f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]. Por exemplo, /\s\w*/ corresponde bar em foo bar.
\S Corresponde um único caractere que não seja um espaço em branco. Equivalente a: [^\f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]. Por exemplo, /\S\w*/ corresponde foo em foo bar.
\t Corresponde uma tabulação.
\r Corresponde uma quebra de linha.
\n Corresponde uma nova linha.
\v Corresponde uma tabulação vertical.
\f Corresponde uma quebra de página.
[\b] Corresponde um carácter backspace. (Não confundir com \b).
\0 Corresponde um caractere NULL. Não coloque outro dígito seguinte a esse.
\cX Onde X é uma letra de A-Z. Corresponde um caractere de controle em uma string. Por exemplo, /\cM/ corresponde control-M em uma string.
\xhh Corresponde o caractere com o valor Unicode hh (dois dígitos hexadecimais).
\uhhhh Corresponde o caractere com o valor Unicode hhhh (quatro dígitos hexadecimais).
\ Para caracteres que são geralmente tratados literalmente, indica que o próximo caractere é especial e NÃO deve ser interpretado literalmente. Por exemplo,/b/ corresponde o caractere b. Colocando uma barra invertida antes do b, ou seja, usando /\b/, o caractere se torna especial, significando corresponder o limite de uma string. Para caracteres que são geralmente tratados especialmente, indica que o próximo caractere NÃO é especial e deve ser interpretado literalmente. Por exemplo, * é um caractere especial que corresponde a 0 ou mais ocorrências do caractere que o precede; por exemplo, /a*/ significa corresponder 0 ou mais ocorrências de a. Para corresponder * literalmente, preceda-o com uma barra invertida; por exemplo, /a\*/ corresponde a*.
Conjunto de caracteres
CARACTERE SIGNIFICADO
[xyz] Um conjunto de caracteres. Corresponde qualquer um dos caracteres cercados. Você pode especificar uma extensão de caracteres usando um hífen. Por exemplo, [abcd] é o mesmo que [a-d]. Eles correspondem o b em banco e o c[cci] em [cci]cortar.
[^xyz] Um conjunto de caracteres negativo ou complementado. Isto é, corresponde qualquer coisa que NÃO esteja cercada nos colchetes. Você pode especificar uma extensão de caracteres usando um hífen. Por exemplo, [^abc] é o mesmo que [^a-c]. Eles inicialmente correspondem n em banco e o em cortar.
Limites
CARACTERE SIGNIFICADO
^ Corresponde o início de uma entrada. Se a flag MULTILINE é utilizada, também corresponde imediatamente após um caractere de quebra de linha. Por exemplo, /^A/ não corresponde o A em an A, mas corresponde o primeiro A em An A.
$ Corresponde o fim de uma entrada. Se a flag MULTILINE é utilizada, também corresponde imediatamente antes de um caractere de quebra de linha. Por exemplo, /o$/ não corresponde o o em cantor, mas corresponde em canto.
\b Corresponde um limite de uma palavra sem espaço, como entre uma letra e um espaço (Não confundir com [\b]). Por exemplo, /\bno/ corresponde o no em de noite e /ly\b/ corresponde o ly em possibly yesterday.
\B: Corresponde a um limite que não inclui palavras sem espaço, como entre duas letras ou entre dois espaços. Por exemplo:
Antes do primeiro caractere de uma string;
Depois do último caractere de uma string;
Entre dois caracteres de uma palavra;
Entre dois caracteres que NÃO contém palavras;
Uma string vazia.
Por exemplo, /\Bte/ corresponde de em de noite, e /on\B/ corresponde on em possivelmente ontem.
Agrupamentos e Back References
CARACTERE SIGNIFICADO
(x) Corresponde x e memoriza o resultado da regex. Esses são chamados parênteses de captura. Por exemplo, /(foo)/ corresponde e memoriza foo em foo bar. A substring correspondida pode ser chamada novamente dos elementos do array resultante [1], …, [n] ou das propriedades predefinidas do objeto RegExp $1, …, $9. Grupos de captura têm uma falta na performance. Se você não necessita que a substring correspondida seja chamada novamente, prefira parênteses de não-captura (veja mais abaixo).
\n Onde n é um número inteiro positivo. Uma referência posterior à última correspondência da substring n em uma expressão regular (contando parênteses esquerdos). Por exemplo, /apple(,)\sorange\1/ corresponde apple, orange, emapple, orange, cherry, peach. Um exemplo mais completo está a seguir nesta tabela.
(?:x) Corresponde x mas não memoriza a correspondência. Esses são chamados parênteses de não-captura. A substring correspondida não pode ser chamada novamente dos elementos do array resultante [1], …, [n] ou das propriedades predefinidas do objeto RegExp $1, …, $9.
Quantificadores
CARACTERE SIGNIFICADO
x* Corresponde o item precedente x zero ou mais vezes. Por exemplo, /assusto*/ corresponde assustoooo em Um fantasma assustooooue assust em Não me assustei, mas não corresponde em Um bode grunhiu.
x+ Corresponde o item precedente x uma ou mais vezes. Equivalente a {1,}. Por exemplo, /o+/ corresponde o o em doce e todos os o em doooooooce.
x? Corresponde o item precedente x nenhuma ou uma vez. Por exemplo, /e?le?/ corresponde o el em angel e o le em angle. Se usado imediatamente após qualquer dos quantificadores *,?, ou { }. Faz o quantificador (coincidindo com o número mínimo de vezes), como oposto ao padrão (correspondendo ao número máximo de vezes). Também usado em asserções lookahead, descritas em (? =), (?!), E (? :) nesta tabela.
x(?=y) Corresponde x apenas se x é seguido por y. Por exemplo, /Jack(?=Sprat)/ corresponde Jack apenas se for seguido por Sprat. /Jack(?=Sprat|Frost)/ corresponde Jack apenas se for seguido por Sprat ou Frost. Porém, nem Sprat nem Frost são partes do resultado da correspondência.
x(?!y) Corresponde x apenas se x NÃO é seguido por y. Por exemplo,/\d+(?!\.)/ corresponde um número apenas se não for seguido por um ponto./\d+(?!\.)/.exec('3.141') corresponde 141, mas não 3.141.
x|y Corresponde ou x ou y. Por exemplo, /verde|vermelha/ corresponde verde emmaçã verde e vermelha em maçã vermelha.
x{n} Onde n é um número inteiro positivo. Corresponde exatamente a ocorrências do item precedente x. Por exemplo, /a{2}/ NÃO corresponde o a em candy, mas ele é todos os a em caandy, e os dois primeiros a em caaandy.
x{n,} Onde n é um número inteiro positivo. Corresponde pelo menos n ocorrências do item precedente de x. Por exemplo, /a{2,}/ NÃO corresponde o a em candy, mas corresponde a todos em caandy e em caaaaaaandy.
x{n,m} Onde n e m são números inteiros positivos. Deve corresponder pelo menos n e no máximo m ocorrências do item precedente de x. Por exemplo, /a{1,3}/ NÃO corresponde nada em cndy, corresponde o a em candy, corresponde os dois a em caandy, e os primeiros três a em caaaaaaandy. Note que quando estiver combinando caaaaaaandy, a correspondência é aaa, mesmo que a string original tenha mais a.
Detalhando as Expressões Regulares
Caractere de Escape \
\ O caractere de escape é usado para determinar como um caractere subsequente será interpretado.
Embora seja apenas um caractere de escape, você pode converter um caractere comum em metacaractere ou transformar um metacaractere meta em um caractere comum.
Por exemplo:
/ tem um significado especial na regex. É usado para marcar o início e o fim de uma expressão regular.
Por exemplo:
var a = /colou?r/;
Se você quiser uma regex para tratar barra como uma barra \ e não como um caractere especial, então você precisa usá-lo junto com o caractere de escape como este: \/
Então, se você quiser isolar a string /shop/ na string /shop/category/men/.
Sua regex deve ser:\/shop
Se você usar a regex /shop, ela não corresponderá à string /shop/category/men/ porque / será tratado como um caractere especial em vez de uma barra.
Outro exemplo:
n é um caractere normal. Mas se você adicionar um caractere de escape antes dele, ele se tornará um metacaractere: \n será um novo caractere.
Então, se você quiser encontrar somente \n na string abcd\n3456.
Sua regex deve ser: \\n
Se você usar a regex abcd\n, não corresponderá à string abcd\n3456 porque \n seria tratado como um caractere especial em vez de um caractere normal.
Outro exemplo:
? É um metacaractere. Para torná-lo em um caractere normal, você precisa adicionar um caractere de escape antes: \?
Então se você quiser corresponder uma string com ponto de interrogação, por exemplo casar?.
Sua regex deve ser: casar\?
Se você usar casar? em uma regex, ela corresponderia somente à casar e não a string casar? pois ? será tratado como metacaractere.
Acento ^
^ = Isso é conhecido como acento circunflexo e é usado para marcar o início de uma expressão regular.
^\/Colou?r = Verifica se há um padrão que comece com /Color ou /Colour.
Exemplo:
/Colour/?proid=3456/review
/Color-red/?proid=3456/review
^\/Nov(ember)? = Verifique se há um padrão que comece com /Nov ou /November. Exemplo:
/November-sales/?proid=3456/review
/Nov-sales/?proid=3456/review
^\/elearning\.html = Procura um padrão que comece com /elearning.html. Exemplo:
/elearning.html/?proid=3456/review
^\/.*\.php = Verifica se há um padrão que comece com qualquer arquivo com a extensão .php. Exemplo:
/elearning.php/color/?proid=3456/review
/games.php/?proid=3456/
/a1.php/color/?proid=3456&gclid=153dwf3533
^\/product-price\.php = Verifica se há um padrão que comece com /product-price.php. Exemplo:
/product-price.php?proid=123&cid=2142
/product-price.php?cid=2142&gclid=442352df
^ também significa NÃO quando usado após um colchete de abertura
[^a] = Verifica se existe algum caractere diferente da letra minúscula a.
Por exemplo: a seguinte regex product-[^a] corresponderá:
/shop/men/sales/product-b
/shop/men/sales/product-c
[^1] = Verifica se existe algum caractere diferente do número 1.
Por exemplo: a regex proid=[^1] corresponderá:
/men/product-b?proid=3456&gclid=153dwf3533
Mas não corresponde a:
/men/product-b?proid=1456&gclid=153dwf3533
[^ab] = Verifica se existe algum caractere diferente das letras minúsculas a e b.
Por exemplo: a seguinte regex location=[^ab] corresponderá:
/shop/collection/prodID=141?location=canada
Mas não corresponde a:
/shop/collection/prodID=141?location=america
/shop/collection/prodID=141?location=bermuda
[^aB] = Verifique se existe algum caractere diferente da letra minúscula a e letra maiúscula B.
[^1B] = Corresponde a qualquer caractere diferente do número 1 e da letra maiúscula B.
[^Dog] = Corresponde a qualquer caractere diferente da seguinte sequência: letra maiúscula D, letra minúscula o e letra minúscula g.
Por exemplo: A seguinte regex location=[^Dog] corresponderá:
/shop/collection/prodID=141?location=canada
/shop/collection/prodID=141?location=denmark
Mas não corresponde a:
/shop/collection/prodID=141?location=Denver
/shop/collection/prodID=141?location=ontario
/shop/collection/prodID=141?location=greenland
[^123b] = Corresponde a qualquer caractere diferente dos seguintes caracteres: número 1, número 2, número 3 e letra minúscula b.
[^1-3] = Corresponde a qualquer caractere diferente do seguinte: número 1, número 2 e número 3.
Por exemplo: a seguinte regex prodID=[^1-3] corresponderá:
/shop/collection/prodID=45321&cid=1313
/shop/collection/prodID=5321&cid=13442
Mas não corresponde:
/shop/collection/prodID=12321&cid=1313
/shop/collection/prodID=2321&cid=1313
/shop/collection/prodID=321&cid=1313
[^0-9] = Verifica se há algum caractere diferente de um número.
Por exemplo: a regex de\/[^0-9] corresponderá a todas as páginas do diretório de/ cujo a string não seja iniciado por um número:
/de/school-london
/de/general/
Mas não corresponde a:
/de/12fggtyooo
[^a-z] = Corresponde a qualquer caractere único que não seja uma letra minúscula.
Por exemplo: a regex de\/[^a-z] corresponderá a todos os diretórios de/ cujo a string não comece com uma letra minúscula:
/de/1london-school
/de/?productid=423543
Mas não corresponde:
/de/school/london
[^A-Z] = Corresponde a qualquer caractere único que não seja uma letra maiúscula.
Dólar $
$ é usado para expressar o fim de uma expressão regular ou o final de uma linha. Por exemplo:
CARACTERE SIGNIFICADO
Colou?r$ Verifica se há um padrão que termine com Color ou Colour.
Nov(ember)?$ Verifica se há um padrão que termine com Nov ou November.
elearning\.html$ Procura um padrão que termine em elearning.html.
\.php$ Procura por um padrão que termine com .php.
product-price\.php$ Verifica se há um padrão que termine com product-price.php.
Colchetes [ ]
[ ] = Este colchete é usado para verificar qualquer caractere único em um conjunto de caracteres especificado entre [ ]. Por exemplo:
CARACTERE SIGNIFICADO
[a] Verifica se existe um único caractere que seja uma letra minúscula “a”.
[ab] Verifica se existe um único caractere que seja uma letra minúscula “a” ou “b”.
[aB] Verifica se existe um único caractere que seja uma letra minúscula “a” ou letra maiúscula “B”.
[1B] Verifica se existe um único caractere que seja um número “1” ou uma letra maiúscula “B”.
[Dog] Verifica se existe um único caractere que pode ser qualquer um dos seguintes caracteres: letra maiúscula “D”, letra minúscula “o” ou letra minúscula “g”.
[123b] Verifica se existe um único caractere que pode ser qualquer um dos seguintes caracteres: número “1”, número “2”, número “3” ou letra minúscula “b”.
[1-3] Verifica se existe um único caractere que pode ser qualquer um dos números 1, 2 e 3.
[0-9] Verifica se existe um único caractere que seja um numeral.
[a-d] Verifica se existe um único caractere que pode ser qualquer uma das seguintes letras minúsculas: “a”, “b”, “c” ou “d”.
[a-z] Verifica se existe um único caractere que seja uma letra minúscula.
[A-Z] Verifica se existe um único caractere que seja uma letra maiúscula.
[A-T] Verifica se há um único caractere que pode ser qualquer letra maiúscula de “A” à “T”.
[home.php] Procure por um único caractere que pode ser qualquer um dos seguintes caracteres: letra minúscula “h”, letra minúscula “o”, letra minúscula “m”, letra minúscula “e”, caractere especial “.” , letra minúscula “p”, letra minúscula “h” ou letra minúscula “p”.
Se você deseja verificar uma letra, independentemente do seu estado (maiúscula ou minúscula), use [a-zA-Z].
Parênteses ( )
( ) = Mais conhecido como parênteses, é usado para selecionar e verificar uma string. Por exemplo:
CARACTERE SIGNIFICADO
(a) Verificar a correspondência da string “a”
(ab) Verificar a correspondência da string “ab”.
(dog) Verificar a correspondência da string “dog”.
(dog123) Verificar a correspondência da string “dog123”.
(0-9) Verificar a correspondência da string “0-9”.
(A-Z) Verificar a correspondência da string “A-Z”.
(a-z) Verificar a correspondência da string “a-z”.
(123dog588) Verificar a correspondência da string “123dog588”.
( ) também é usado para criar e armazenar variáveis. Por exemplo, ^ (.*) $
Ponto de interrogação ?
? É usado para verificar zero (nenhuma ocorrência) ou uma ocorrência do caractere que o precede. Por exemplo:
CARACTERE SIGNIFICADO
[a]? Verifica se existe zero ou uma ocorrência de letra minúscula “a”.
[dog]? Verifica se existe zero ou uma ocorrência das letras minúsculas “d”, “o” ou “g”.
[^dog]? Verifique se existe zero ou uma ocorrência de um caractere que não sejam as letras minúscula “d”, “o” ou “g”.
[0-9]? Verifica se existe zero ou uma ocorrência de um número.
[^a-z]? Verifica se existe zero ou uma ocorrência de um caractere que não seja uma letra minúscula.
^casa?r$ Verifica a ocorrência da string “casa” ou “casar”.
^Nov(ember)28(th)?$ Verifica a ocorrência das seguintes strings “nov 28”, “november 28”, “Nov 28th” e “November 28th”.
? quando usado dentro de uma expressão regular, transforma uma letra ou um conjuntos de letras que o precede em opcional.
Por exemplo, a expressão regular: ^casa?r$ corresponde tanto a “casa” como a “casar”. Da mesma forma, a expressão regular: ^Nov(ember)28(th)?$ corresponde a: “nov 28”, “november 28”, “Nov 28th” e “November 28th”.
Sinal de +
+ É usado para verificar uma ou mais ocorrências do caractere que o precede. Por exemplo:
CARACTERE SIGNIFICADO
[a]+ Verifica uma ou mais ocorrências de letra minúscula “a”.
[dog]+ Verifica uma ou mais ocorrências de letras “d”, “o” ou “g”.
[548]+ Verifica uma ou mais ocorrências de números “5”, “4” ou “8”.
[0-9]+ Verifica um ou mais números.
[a-z]+ Verifica uma ou mais letras minúsculas.
[^a-z]+ Procura por um ou mais caracteres que não sejam letras minúsculas.
[a-zA-z]+ Procura por qualquer combinação de letras maiúsculas e minúsculas.
[a-z0-9]+ Procura por qualquer combinação de letras minúsculas e números.
[A-Z0-9]+ Procura por qualquer combinação de letras minúsculas e números.
[^9]+ Procura por um ou mais caracteres que não sejam o número 9.
Asterisco *
* É usado para verificar qualquer número de ocorrências (incluindo zero ocorrências) do caractere que o precede.
Por exemplo, 31* corresponderia a 3, 31, 311, 3111, 31111 etc.
Ponto .
. É usado para verificar um único caractere (qualquer caractere que possa ser digitado no teclado que não seja um caractere de quebra de linha (\n)).
Por exemplo, a expressão regular: Action ., Scene2 corresponderia:
Action 1, Scene2
Action A, Scene2
Action 9, Scene2
Action &, Scene2
Mas não corresponderia:
Action 10,Scene2
Action AB,Scene2
Barra Vertical |
| Numa expressão regular é interpretado por “OU” na lógica de uma regex. Por exemplo:
(dele|dela) = Verifica a ocorrência da string “dele” ou “dela”.
dele|dela = Verifica a ocorrência da string “dele” ou “dela”.
Por exemplo, a regex dele|dela vai corresponder:
Este é o livro dele
Este é o livro dela
Dele ou Dela
Dela ou Dele
Exclamação !
! – Numa expressão regular é interpretado por “NÃO” na lógica de uma regex. Mas ao contrário de ^ (circunflexo), o ! é usado apenas no início de uma regra ou condição. Por exemplo:
(!abc) = Procura por uma string que não seja a string “abc”.
[!0-9] = Verifica se existe um único caractere que não seja um número.
[!a-z] = Verifica se existe um único caractere que não seja uma letra minúscula.
Sinal de chaves { }
{ } é usado para verificar uma ou mais ocorrências do caractere anterior.
É como o metacaractere +, mas fornece controle sobre o número de ocorrências do caractere que você deseja corresponder na regex.
Por exemplo:
CARACTERE SIGNIFICADO
1{1} Verifica uma ocorrência do caractere “1”. Esta regex corresponderá a string “1”.
1{2} Verifica por duas ocorrências do caractere “1”. Este regex vai corresponder a string “11”.
1{3} Verifica por três ocorrências do caractere “1”. Este regex corresponderá a string “111”.
1{4} Verifica se existe quatro ocorrências do caractere “1”. Este regex corresponderá a string “1111”.
1{1,4} Verifica por 1 a 4 ocorrências do caractere “1”. Esta regex corresponderá a 1,11, 111, 1111.
[0-9]{2} Verifica se há duas ocorrências de um número ou, em outras palavras, verifique se há dois dígitos como, por exemplo, o número “12”.
[0-9]{3} Verifica por 3 ocorrências de um número ou em outras palavras, verifique se há três dígitos como, por exemplo, o número “123”.
[0-9]{4} Verifica se há 4 dígitos como, por exemplo, o número “1234”.
[0-9]{1,4} Procura um número de 1 a 4 dígitos.
[a]{2} Verifica se há duas ocorrências do caractere “a”. Esta regex corresponderá a string “aa”.
[a]{3} Procura por 3 ocorrências do caractere “a”. Este regex corresponderá a string “aaa”.
[a]{4} Verifica se há 4 ocorrências do caractere “a”. Este regex corresponderá s tring “aaaa”.
[a]{1,4} Procura de 1 à 4 ocorrências do caractere “a”. Esta regex corresponderá as strings “a”, “aa”, “aaa”, “aaaa”.
[a-z]{2} Procura por 2 ocorrências de uma letra minúscula. Este regex vai corresponder as strings “aa”,”bb”, “cc” e etc.
[A-Z]{3} Procura por 3 ocorrências de uma letra maiúscula. Este regex vai corresponder as strings “AAA”, “BBB”, “CCC” e etc.
[a-zA-Z]{2} Procura por 2 ocorrências de uma letra (não importando se é maiúscula ou minúscula). Este regex vai corresponder a “aa”, “aA”, “Aa”, “AA” e etc.
[a-zA-Z]{1,4} Procura de uma à 4 ocorrências de uma letra (não importando se é maiúscula ou minúscula). Este regex corresponderá: “aaaa”, “AAAA”, “aAAA”, “AAAa” e etc.
(rock){1} Procura por uma ocorrência da string “rock”. Este regex irá corresponder a: “rock”.
(rock){2} Procurar por duas ocorrências da string “rock”. Este regex corresponderá: “rockrock”.
(rock){3} Procura por 3 ocorrências da string “rock” . Este regex corresponderá: “rockrockrock”.
(rock){1,4} Verifica de 1 à 4 ocorrências da string “rock”. Este regex corresponderá: “rock”, “rockrock”, “rockrockrock”, “rockrockrockrock”.
Espaço em branco ou vazio
Para criar um espaço em branco em uma expressão regular, basta usar um espaço em branco. Por exemplo:
(Chuck Norris) = Irá corresponder a string “Chuck Norris”.
Invertendo Regex em JavaScript
Inverter um regex significa inverter seu significado. Você pode inverter um regex em JavaScript usando lookaheads positivos e negativos.
Use lookahead positivo se quiser corresponder a algo que é seguido por uma outra coisa. Use lookahead negativo**** se quiser corresponder a algo não seguido por uma outra coisa.
Lookahead positivo começa com (?= seguido de).
Lookahead negativo começa com (?! seguido de).
Por exemplo: a regex de\/[^a-z] corresponderá a todas as URLs da pasta de/ cujo nome NÃO comece por uma letra minúscula. Exemplo:
/de/1london-school
/de/?productid=423543
Mas irá corresponder a:
/de/school/london
O inverso desta expressão regular seria: corresponder a todas as URLs na pasta de/ cujo nome começa com uma letra minúscula:
Por exemplo: o regex de\/(?![^a-z]) corresponderá:
/de/school/london
Mas não corresponde:
/de/1london-school
/de/?productid=423543
A Regex do JavaScript suporta apenas lookaheads e não lookbehind. O Google Analytics não suporta lookahead ou lookbehind.
Outros exemplos de Regex
CARACTERE SIGNIFICADO
^(*\.html)$ Verifica qualquer ocorrência de caracteres que precede .html e os armazena em uma variável.
^dog$ Procura a string “dog”.
^a+$ Verifica a ocorrência de uma ou mais letras minúsculas “a”.
^(abc)+$ Verifica uma ou mais ocorrências da string “abc”.
^[a-z]+$ Verifica uma ou mais ocorrências de uma letra minúscula.
^(abc)*$ Verifica qualquer número de ocorrências da string “abc”.
^a*$ Verifica qualquer número de ocorrências da letra minúscula “a”.
Com encontrar todos os arquivos que começam com “elearning” e que têm a extensão de arquivo .html. Regex: ^elearning*\.html$
Como encontrar todos os arquivos PHP. Regex: ^*\.php$
Testando as expressões regulares (RegEx)
Se você se considera iniciante ou experiente no uso de regex, você deve sempre testar suas expressões regulares.
Você pode testar expressões regulares através de:
Extensão cromo do RegExp Tester;
Ferramenta on-line Regex101.com;
O filtro de tabela avançada na interface de relatórios no GA com a opção Regex;
Recurso de visualização do seu segmento personalizado no GA;
Janela de console de depuração do GTM para testar a regex usada em gatilhos e variáveis;
Usando RegExpObject para testar o regex no GTM durante o tempo de execução.
Testando a Regex #1: Extensão chrome RegExp Tester
O RegExp Tester é uma extensão do Chrome usada para criar e validar expressões regulares:
RegExp Tester
Na expressão regular abaixo, o resultado da pesquisa destacada (ou seja, carros usados) é o padrão que corresponde a minha regex.
A função da regex é filtrar dois conjuntos de strings separados por espaço.
RegExp Tester
Veja como usar esse filtro para filtrar keywords de cauda longa no Google Analytics.
Testando a Regex #2: Ferramenta on-line Regex101.com
Regex101.com é uma ferramenta online usada para criar e testar expressões regulares. Confira a interface da ferramenta Regex101:
Regex101 usado para procurar com um conjunto de 3 strings separadas por espaço
Use o “FLAVOR” como JavaScript, pois o Google Analytics aceita a expressão regular POSIX do JavaScript.
Testando a Regex #3: Filtro avançado de relatórios no GA
Você pode criar e testar o regex no Google Analytics usando o filtro avançado na interface de relatórios com a opção Regex:
Filtro avançado no Google Analytics
Testando a Regex #4: pré-visualização do recurso de segmento personalizado no GA
Você pode criar e testar sua regex no Google Analytics usando o recurso de visualização em um segmento personalizado:
Segmento personalizado no Google Analytics
Testando a Regex #5: Janela do console de depuração do GTM
Para o GTM, você pode usar a janela do console de depuração para testar o regex usado em gatilhos e variáveis:
Ferramenta de teste e depuração do Tag Manager
Testando a Regex #6: usando “RegExp” para testar o regex no GTM durante o tempo de execução
RegExp é um objeto da expressão regular que é usado para armazenar uma expressão regular em JavaScript. Por exemplo:
var regex = /^\/search\/(.*)/;
Ou seja: “regex” (usada como uma variável) é um objeto de uma expressão regular que é usado para armazenar a expressão regular /^\/search\/(.*)/.
Métodos .test e .exec do objeto RegExp:
Tanto .test quanto .exec são os métodos do objeto RegExp e são usados com frequência no Tag Manager (Gerenciador de Tags do Google) para testar expressões regulares usando o tempo de execução.
O método .test é usado para testar uma correspondência de uma regex em uma string.
Ele retorna um valor booleano: true se encontrar uma correspondência, caso contrário, retorna false.
Exemplo: RegExpObject.test (string a ser pesquisada)
Por exemplo:
function() {
var regex = /^\/search\/(.*)/;
var pagePath = '/search/enhanced ecommerce tracking/';
if(regex.test(pagePath)
{
var searchTerm = regex.exec(pagePath)[1];
var NewUri = "/search/?s=" + searchTerm;
return NewUri;
}
return false;
}
O método exec (como em regex.exec) também testa uma correspondência em uma string.
Mas ao contrário de test, ele retorna um array[^array] que contém o texto correspondente, se encontrar a correspondência.
[^array]: Array é uma estrutura de dados que armazena uma coleção de elementos de tal forma que cada um dos elementos possa ser identificado por, pelo menos, um índice ou uma chave.
Caso contrário, retorna um null.
Exemplo: RegExpObject.exec (string a ser pesquisada).
O método exec retorna um array de todo o texto correspondente.
Então, para a regex:
^\/search\/(.*)
// e
pagePath = /search/enhanced ecommerce tracking/
regex.exec(pagePath) = [ ‘/search/enhanced ecommerce tracking/’, ‘enhanced ecommerce tracking/’];
regex.exec(pagePath)[0] = [ ‘/search/enhanced ecommerce tracking/’];
regex.exec(pagePath)[1] = [‘enhanced ecommerce tracking/’];
Então é isso! Se você gostou do artigo e achou útil para você, deixe seu comentário abaixo.
***************************************************************************************************
Alura > Cursos de Front-end > Cursos de JavaScript > Conteúdos de JavaScript > Primeiras aulas do curso Expressões regulares: capturando textos de forma mágica
Expressões regulares: capturando textos de forma mágica
Começando com Regex - Começando a aprender Regex com Javascript
Download do projeto
Você pode fazer o DOWNLOAD completo do projeto inicial aqui.
O que é uma Expressão Regular?
Uma expressão regular, ou Regex, são padrões utilizados para identificar determinadas combinações ou cadeias de caracteres em uma string. Ela faz parte do dia a dia de todos os programadores e administradores de infra. Por meio dela, podemos validar a entrada de usuários ou encontrar alguma informação em logs, documentação ou saída de comando. O mais legal é que as Regex são escritas independentes de uma linguagem, como JavaScript ou C#. As expressões são definidas em sua própria linguagem formal e uma vez aprendida, podemos aplicar o conhecimento dentro da linguagem de nossa preferência. Em outras palavras, linguagens como Java, JavaScript, C# e várias outras possuem uma implementação das expressões regulares e sabem interpretá-la.
Neste curso, vamos focar nessa linguagem formal, mas claro, também mostraremos como executá-la nas plataformas diversas.
Onde queremos chegar? Entender, por exemplo, uma Regex assim:
<(img)\s+src="(.+)"(?:>(?:.*)<\/\1>|\s+\/>)
E saber executá-la utilizando a sua linguagem. No último capítulo desse curso mostraremos como executar uma Regex com Java, C#, PHP, Python, Ruby e JavaScript.
Ambiente de execução
Para testar as Regex durante o curso, preparamos uma página HTML e um código JavaScript que interpreta a Regex. Você pode baixar o projeto aqui. Basta extrair o ZIP e abrir o arquivo index.html.
Ao abrir, podemos ver que a página mostra um formulário para executar e testar as regex. Vamos utilizar esse formulário para analisar as expressões.
Repare que já estamos usando um vocabulário focado na Regex. A string que queremos usar na busca, no exemplo da imagem, a string imagem.png é chamada de alvo, ou target. A expressão regular, na imagem .*png, estamos chamando de pattern. Os resultados são os *matches. *
Já estamos aplicando a primeira Regex, estamos procurando algum texto que termine com png. O ponto (.) é um caractere especial e significa qualquer caractere. Ou seja, a Regex não interpreta o ponto literalmente e sim faz um match para qualquer *char. *
O asterisco (*) é outro meta-char com o significado "zero, um ou mais vezes". Ao adicionar o asterisco (*), conseguimos definir a quantidade, por isso ele também é chamado de quantifier. O ponto (.) e asterisco (*) fazem parte dos metacaracteres que veremos durante o curso.
Apresentando o código
Qualquer Regex precisa ser interpretada por meio de uma Regex engine. Esse motor é uma parte de software que processa a expressão, tentando achar o padrão dentro da string dada, devolvendo os resultados. Normalmente a Regex engine faz parte da aplicação maior, para executar uma validação ou busca de uma string.
No nosso caso, usamos uma Regex engine baseada na linguagem JavaScript. No treinamento, veremos ainda como usar expressões regulares em outras linguagens, como Java, C# ou Ruby.
Vamos dar uma olhada na função executaRegex, dentro do arquivo regex.js. Nela criamos o objeto que sabe interpretar a expressão regular. O JavaScript chama esse objeto de RegExp:
var objetoRegex = new RegExp(textoPattern, 'g');
No construtor passamos o pattern, aquilo que colocamos no input Pattern da página index.html. A letra g é uma flag do mundo JavaScript e significa global, para aplicar a regex na string inteira (e não parar no primeiro match) .
Após a inicialização do objeto regex, podemos executá-lo usando o método exec, que recebe como parâmetro o alvo:
while (resultado = objetoRegex.exec(textoTarget)) {
//codigo omitido
}
O método exec devolve um resultado que possui a string match *e outras informações, como a posição/index. *Repare que estamos fazendo um laço sempre pedindo o próximo resultado.
O resto do código do arquivo regex.js se preocupa com a leitura, validação e apresentação dos dados.
Começando com Regex - O nosso primeiro problema
Já vimos um pequeno exemplo de regex e já sabemos que existem metacaracteres (meta-char) que possuem significados especiais, como o ponto (.) ou asterisco (*). No nosso primeiro exemplo para valor, vamos focar no CPF.
Uma tarefa muito comum no dia a dia do desenvolvedor é parsear um arquivo linha a linha, onde cada linha representa um dado ou registro. Há vários tipos de arquivos, e nesse curso vamos usar o exemplo de arquivo CSV, ou Comma-separated Values, por exemplo:
João Fulano,123.456.789-00,21 de Maio de 1993,(21) 3079-9987,Rua do Ouvidor,50,20040-030,Rio de Janeiro
Maria Fulana, 98765432100,11 de Abril de 1995,(11) 933339871,Rua Vergueiro,3185,04101-300,São Paulo
denise teste, 987.654.321.00,28 de Dezembro de 1991,(31)45562712,SCS Qd. 8 Bl. B-50,11,70333-900,Rio Grande
Então, em cada linha temos vários valores separados pela vírgula, por exemplo:
João Fulano,123.456.789-00,21 de Maio de 1093,(21) 3079-9987,Rua Buarque de Macedo,67,22220-232,Rio de Janeiro
Encontrando números
Repare que o segundo valor é um CPF que precisamos extrair dessa linha. Você conhece um CPF e sabe o padrão de caracteres dele, só falta traduzir o seu conhecimento para a linguagem que a regex engine entende!
Um CPF são 9 números, separados em blocos de 3 números por um ponto, mais um hífen e mais dois números. Para representar um número, podemos utilizar uma caracter class, que é um símbolo especial para representar um conjunto de caracteres. No mundo de regex, um número é representado pelo \d.
O primeiro quantifier
Agora queremos que esse número apareça 3 vezes. Já vimos que o asterisco (*) significa 0, 1 ou mais vezes, ou seja, não atende. Queremos exatamente 3 números que podemos definir pela expressão \d{3}.
Dentro das chaves definimos a quantidade que o caractere deve estar presente. Com isso, já podemos encontrar 3 dígitos. Agora vem o "ponto" só que aprendemos que esse caractere possui um significado especial. No entanto queremos procurar o ponto literalmente e não qualquer caractere. Para deixar claro que o ponto deve ser ponto apenas, é preciso escapar o caractere com \. Assim temos:
\d{3}\.
Sabendo disso podemos definir o resto do CPF:
\d{3}\.\d{3}\.\d{3}\-\d{2}
Repare que o usamos um hífen seguido por apenas 2 dígitos.
Classes de caracteres - Entendendo Classes de Caracteres
No último capítulo demos uma introdução às regex e vimos nossa primeira expressão para encontrar um CPF em uma linha de texto. Já criamos uma expressão regular, bastante simples ainda encontrando o CPF:
\d{3}\.\d{3}\.\d{3}-\d{2}
Olhando novamente no nosso arquivo CSV, percebemos que há uma pequena variação da formatação do CPF: 987.654.321.00 e 11122233300.
A nossa regex falha e não "enxerga" esses CPFs. Para fazer ela funcionar, devemos usar o poder das classes de caracteres. Na aula anterior já vimos uma classe predefinida, o \d. Essa classe na verdade é apenas um atalho pra [0-9], ou seja qualquer dígito. Os colchetes definem uma classe de caracteres e nada impede que criemos nossa própria classe.
Repare que na décima segunda posição do CPF pode vir um ponto OU hífen, que podemos declarar com a classe: [.-]. Perceba também que não escapamos o ponto (.), pois dentro dos colchetes o ponto já possui o seu valor literal. Importante também é que a ordem não importa, [.-] e [-.] são a mesma coisa.
Caracteres opcionais
A quantidade de vezes que essa classe de caracteres deve aparecer é definida por um quantifier, por exemplo, como já vimos:
[.-]* - ponto ou hífen zero, uma ou mais vezes.
[.-]{1} - ponto ou hífen uma vez.
No nosso caso [.-] é opcional, pode ter ou não ter, mas uma vez apenas. Dentro da regex, isso é declarado através do meta-char ponto de interrogação (?). O ponto de interrogação (?), que significa zero ou uma vez, é mais um quantifier.
Assim podemos combinar a classe [.-] com o quantifier ?:
[.-]?- ponto ou hífen zero ou uma vez.
Vamos aplicar isso na nossa regex:
\d{3}[.-]?\d{3}[.-]?\d{3}[.-]?\d{2}
Agora sim, os CPFs serão encontrados com ou sem hífen/ponto.
Sabendo disso até podemos reescrever a classe \d (sim \d também é uma classe, já predefinida). Invés de usar \d podemos escrever:
[0123456789]
Ou mais curto:
[0-9]
Só cuidado, o hífen não possui um significado especial e define todos os números de 0 até 9.
Sobre o curso Expressões regulares: capturando textos de forma mágica
O curso Expressões regulares: capturando textos de forma mágica possui 134 minutos de vídeos, em um total de 81 atividades. Gostou? Conheça nossos outros cursos de JavaScript em Front-end, ou leia nossos artigos de Front-end.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Começando com Expressões regulares
Classes de caracteres
Encontrando a posição certa com âncoras
Trabalhando com grupos
O que são grupos?
Ganancioso ou preguiçoso
Usando regex nas diversas linguagens
Aprenda JavaScript acessando integralmente esse e outros cursos, comece hoje!
**************************************************************************************
Expressões Regulares
« Previous
Next »
Expressões regulares são padrões utilizados para selecionar combinações de caracteres em uma string. Em JavaScript, expressões regulares também são objetos. Elas podem ser utilizadas com os métodos exec e test do objeto RegExp, e com os métodos match, replace, search, e split do objeto String. Este capítulo descreve o uso de expressões regulares em JavaScript.
Criando uma Expressão Regular
Há duas maneiras de construir uma expressão regular:
Usando uma expressão literal, que consiste em um padrão fechado entre barras, como o exemplo a seguir:
const re = /ab+c/;
As expressões regulares na forma literal são compiladas quando o script é carregado. Esta forma de construção possui melhor performace quando a expressão regular utilizada é uma constante, ou seja, não muda durante a execução.
Ou chamando o construtor do objeto RegExp:
let re = new RegExp("ab+c");
Usando o construtor, a compilação da expressão regular é realizada em tempo de execução. Use o construtor quando souber que o padrão da expressão regular irá mudar ou quando o padrão for desconhecido, oriundo de outra fonte, uma entrada de usuário por exemplo.
Nota: Se você já está familiarizado com as formas de uma expressão regular, também pode ler o resumo para uma rápida pesquisa de um padrão específico.
Escrevendo um padrão de expressão regular
Um padrão de expressão é composto por um conjunto de caracteres simples, como /abc/, ou uma combinação de caracteres simples e especiais, como /ab*c/ ou /Capitulo (\d+)\.\d*/. O último exemplo contém parênteses, que são usados como um mecanismo de armazenamento. A correspondência feita por essa parte da expressão é armazenada para uso posterior, como descrito em: Using Parenthesized Substring Matches.
Uso de Padrões Simples
Padrões simples são construídos utilizando os caracteres que você deseja encontrar correspondências diretas. Por exemplo, o padrão /abc/ encontra combinações de caracteres em strings apenas quando os caracteres 'abc' forem encontrados juntos e na ordem especificada. Esse padrão será encontrado com sucesso nas strings "Olá, você conhece o abc?" e "Os mais recentes aviões evoluíram do slabcraft.". Em ambos os casos, a correspondência estará no subconjunto 'abc'. Porém, o padrão não será encontrado no texto "Grab crab" pois apesar de conter os mesmos caractes do padrão 'ab c', estes não aparecem na ordem especificada.
Uso dos Caracteres Especiais
Quando for necessário buscar algo além de uma correspondência direta, como encontrar uma ou mais ocorrências da letra 'b', ou encontrar espaços em branco, será necessário adicionar caracteres especiais ao padrão. Por exemplo, para encontrar uma única correspondência de 'a' seguido de nenhum ou mais 'b's seguido de 'c', o padrão a utilizar seria /ab*c/. O caractere * seleciona zero ou mais ocorrências do item que o precede. Se aplicada ao texto 'cbbabbbbcdebc', essa expressão regular encontraria o subconjunto grifado no texto.
A tabela abaixo fornece uma lista completa dos caracteres especiais que podem ser utilizados nas expressões regulares, com sua respectiva descrição. Para testar os exemplos de expressão regular você pode usar o regExr.
Caracteres especiais utilizados em expressões regulares. Caractere Descrição
\
Aplicado conforme as seguintes regras:
Uma barra invertida que preceda um caractere não especial significa que o caractere seguinte é especial e não deve ser interpretado de forma literal. Por exemplo, o caractere 'b' quando não precedido de uma barra invertida significará uma ocorrência do próprio caractere 'b' minúsculo, porém se precedido da barra invertida '\b' ele passará a significar a ocorrência do caractere especial fronteira do caractere.
Quando a barra invertida preceder um caractere especial isso significará que o próximo caractere deve ser interpretado de forma literal. Por exemplo o padrão /a*/, que selecionará a ocorrência de zero ou mais caracteres 'a' quando utilizado sem a \ para escape. Por outro lado no padrão /a\*/ o asterisco deixa de ter seu significado especial, pois a '\' de escape fará com que o '*' seja interpretado de forma literal, passando o padrão a selecionar o caractere 'a' seguido do caractere '*'.
Quando utilizar o construtor RegExp("padrao"), não se esqueça de fazer o escape do caractere \, já que esse caractere é também utilizado como caractere de escape em strings.
^
Corresponde ao início do texto. Se a flag multilinhas é setada para true, também se aplica imediatamente após um caractere de quebra de linha.
Por exemplo, /^A/ não corresponde ao 'A' em "Um Alvo", mas corresponde ao 'A' em "Alvo Encontrado".
Este caractere tem um significado diferente quando aparece como o primeiro caractere em um conjunto padrão de caracteres. Veja conjunto de caracteres negados ou complementados para detalhes e mais exemplos.
$
Corresponde ao final do texto. Se a flag multilinhas é setada para true, também se aplica imediatamente antes de um caractere de quebra de linha.
Por exemplo, /r$/ não corresponde ao 'r' em "corre", mas acha correspondência em "correr".
*
Corresponde a expressão que o precede repetida 0 ou mais vezes. Equivalente a {0,}
Por exemplo, /bo*/ acha uma correspondência para 'boooo' em "Scoob doo" e 'b' em "A bird warbled", mas nenhuma em "A goat grunted".
+
Corresponde a expressão que o precede repetido 1 ou mais vezes. Equivalente a {1,}.
Por exemplo, /a+/ acha correspondência para o 'a' em "candy" e todos os "as" em "caaaaaaandy", mas nâo encontra em "cndy".
?
Corresponde a expressão que o precede repetido 0 ou 1 vez. Equivalente à {0,1}.
Por exemplo, /e?le?/ encontra o 'el' em "angel" e o 'le' em "angle" e também o 'l' em "oslo".
Se usado imediatamente após qualquer um dos quantificadores *, +, ? ou {}, faz o quantificador não guloso (combinando o número mínimo de vezes), como um oposto para o padrão que é guloso (combinar o número máximo possível). Por exemplo, aplicando /\d+/ em "123abc" encontra "123". Mas aplicando /\d+?/, apenas "1" será encontrado.
Também usado em declarações lookahead, descritas sob x(?=y) e x(?!y)logo abaixo na tabela.
.
(O ponto decimal) corresponde com qualquer caracter, exceto o caracter de nova linha.
Por exemplo, /.n/ acha correspondência para o 'an' e 'on' em "nove dias restantes para onze de agosto.", mas não encontra 'no' em 'nove'.
(x)
Pesquisa correspondência com o caractere 'x' e memoriza-o, como a o exemplo a seguir mostra. Os parênteses são chamados parênteses de captura.
Por exemplo, o '(foo)' e '(bar)' no padrão /(foo) (bar) \1 \2/ encontra e memoriza a primeira das duas palavras na string "foo bar foo bar". O \1 e \2 no padrão combina as duas últimas palavras da string. Note que \1, \2, \n são utilizados na parte correspondente do regex.
(?:x) Pesquisa correspondência com o caractere 'x' porém não o memoriza. Os parênteses são chamados de parênteses de não-captura e permitem que você defina uma subexpressão para operadores de expressão regular trabalhar com eles. Considere essa expressão de exemplo /(?:foo){1,2}/. Se a expressão era /foo{1,2}/, o {1,2} poderia ser aplicado apenas para o último 'o' em 'foo'. Com os parênteses de não-captura, o {1,2} é aplicado para toda a palavra 'foo'.
x(?=y)
Pesquisa correspondência em 'x' apenas se 'x' é seguido por 'y'. Isso é chamado de lookahead.
Por exemplo, /Jack(?=Sprat)/ busca 'Jack' apenas se é seguido por 'Sprat'. /Jack(?=Sprat|Frost)/ busca 'Jack' apenas se ele é seguido por 'Sprat' ou 'Frost'. No entanto, 'Sprat' nem 'Frost' faz parte do resultado retornado.
x(?!y)
Pesquisa correspondência em 'x' apenas se 'x' não é seguido por 'y'. Isso é chamado negação lookahead.
Por exemplo, /\d+(?!\.)/ encontra um número apenas se ele não for seguido por um ponto decimal. A expressão regular /\d+(?!\.)/.exec("3.141") encontra '141' mas não '3.141'.
x|y
Pesquisa correspondência em 'x' ou 'y'.
Por exemplo, /verde|vermelha/ encontra 'verde' em "maçã verde" e 'vermelha' em "maçã vermelha."
{n}
Pesquisa n ocorrências correspondentes ao caracter precedido. Onde, n deve ser um inteiro positivo.
Por exemplo, /a{2}/ não encontra o 'a' em "candy," mas encontra-o se houver a quantidade de a's informarda em "caandy," e os dois primeiros a's em "caaandy."
{n,m}
Pesquisa a n menor correspondência e a m maior correspondência do caractere precedido. Quando n ou m é zero, ele poderá ser omitido. Onde, n e m devem ser inteiros positivo.
Por exemplo, /a{1,3}/ não encontra nada em "cndy", mas encontra o 'a' em "candy", encontra os dois primeiros a's em "caandy," e encontra os três primeiros a's em "caaaaaaandy". Observe que, ao fazer a correspondência de "caaaaaaandy", serão encontrados apenas os "aaa", mesmo que a string tenha mais a's.
[xyz]
Um conjunto de caracteres. Pesquisa correspondência para qualquer um dos caracteres entre colchetes. Você pode especificar um intervalo de caracteres usando hífen. Caracteres especiais (como o ponto (.) e o asterisco(*)) não tem significado algum quando está dentro de um conjunto de caracteres. Não necessita utilizar escape neles. Mas, se utilizar escape também irá funcionar.
Por exemplo, [abcd] é o mesmo que [a-d]. Com a expressão será encontrado o 'b' em "beijo" e o 'c' em "chop". A expressão /[a-z.]+/ e /[\w.]+/ ambos encontraram as letras que formam "test.i.ng".
[^xyz]
Um conjunto de caracteres negados ou complementados. Isto é, combina com qualquer coisa que não esteja listado entre os colchetes. Você pode especificar um intervalo de caracteres usando hífen. Tudo que funciona no conjunto de caracteres (apresentado acima) também funciona aqui.
Por exemplo, [^abc] é o mesmo que [^a-c]. Com a expressão será encontrado inicialmente 'e' em "beijo" e 'h' em "chop."
[\b] Pesquisa correspondência com espaço em branco (U+0008). É preciso utilizar os colchetes se você quer encontrar um espaço em branco. (Não confunda-o com \b.)
\b
Pesquisa correspondência em uma fronteira de caractere. Uma fronteira de caractere corresponde a posição onde um caractere/palavra não é seguido ou antecedido por outro caractere/palavra. Isto é, em fronteira de caractere não pode haver nenhum caractere ou espaço, seu tamanho deve ser vazio. (não confunda-o com [\b].)
Exemplos:
/\bmoo/ encontra a substring 'moo' em "moon" ;
/oo\b/ não encontra o 'oo' em "moon", devido o 'oo' ser seguido por 'n' que é um caractere;
/oon\b/ encontra a substring 'oon' em "moon", devido 'oon' ser o fim da string, ou seja, não é seguido por nenhum caractere;
/\w\b\w/ não encontrará nada, pois o caractere nunca será seguido por um não caractere e um caractere.
Nota: O mecanismo de expressão regular no JavaScript define um conjunto específico de caracteres para serem caracteres "palavras". Qualquer caractere que não esteja neste conjunto é considerado uma quebra de palavra. Este conjunto de caractere é bastante limitado: consiste apenas no alfabeto romano tanto maiúsculo como minúsculo, digítos decimais, e o caractere sublinhado. Caracteres acentuados, tal como "é" ou "ã" são, infelizmente, tratados como palavras quebradas.
\B
Pesquisa correspondência que não seja em uma fronteira de caractere. Para a correspondência é associada uma posição onde o caractere anterior e o próximo tem as mesmas características: ambos são caractere/palavra, ou ambos não sejam caractere/palavra. O início e o fim de uma string não considerados como não caractere/palavra.
Por exemplo, /\B../ encontra correspondente 'oo' em "boolean", e /y\B./ encontra correspondente 'ye' em "possibly yesterday."
\cX
Onde X é um caractere pertencente ao conjunto A-Z. Encontra correspondência de um caractere de controle em uma string.
Por exemplo, /\cM/ encontra correspondente control-M (U+000D) em uma string.
\d
Encontra correspondência com um número. Equivalente a [0-9].
Por exemplo, /\d/ ou /[0-9]/ encontra correspondente '8' em "Dróide BB8".
\D
Encontra correspondência com um caractere que não seja número. Equivalente a [^0-9].
Por exemplo, /\D/ ou /[^0-9]/ econtra correspondente 'C' em "C3 está ativada."
\f Encontra correspondência com um caractere de escape avanço de página (U+000C).
\n Encontra correspondência com um caractere de escape quebra de linha (U+000A).
\r Encontra correspondência com um caractere de escape retorno de carro (U+000D).
\s
Encontra correspondência com um único caractere de espaço em branco, espaço, tabulação, avanço de página, quebra de linha. Equivalente a [ \f\n\r\t\v\u00A0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u2028\u2029\u202f\u205f\u3000].
Por exemplo, /\s\w*/ encontra correspondente ' bar' em "foo bar."
\S
Encontra correspondência em um único caractere que não seja espaço em branco. Equivalente a [^ \f\n\r\t\v\u00A0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u2028\u2029\u202f\u205f\u3000].
Por exemplo, /\S\w*/ encontra correspondente 'foo' em "foo bar."
\t Encontra correspondência em uma tabulação (U+0009).
\v Encontra correspondência em uma tabulação vertical (U+000B).
\w
Encontra correspondência de qualquer caractere alfanumérico incluindo underline. Equivalente a [A-Za-z0-9_].
Por exemplo, /\w/ encontra correspondente 'a' em "apple," '5' em "$5.28," e '3' em "3D."
\W
Encontra correspondência em um não caractere. Equivalente a [^A-Za-z0-9_].
Por exemplo, /\W/ ou /[^A-Za-z0-9_]/ encontra correspondente '%' em "50%."
\num
Onde num é um inteiro positivo. Faz referência a substring pertencente à um grupo, um grupo é definido entre parênteses. Grupos são numerados de 1 até 9.
Por exemplo, /(muito) (cacique) pra \2 \1/ encontra 'muito cacique pra cacique muito' em 'Na aldeia tem muito cacique pra cacique muito.'
\0 Encontra correspondência em um caractere NULL (U+0000). Não adicione outro número após o zero, pois \0 é um escape para número octal.
\xhh Encontra correspondência com o código hh (dois valores hexadecimal).
\uhhhh Encontra correspondência com o código hhh (três valores hexadecimal).
\u{hhhh} (funciona apenas com a flag u) Encontra correspondência com o valor Unicode hhhh (dígitos hexadecimais).
Usando Parênteses
Usar parênteses em volta de qualquer parte de uma expressão regular faz com que essa parte seja lembrada para ser usada depois, como descrito em Usando as Substrings entre Parênteses na Expressão Regular.
Por Exemplo, a expressão /Capitulo (\d+)\.\d*/ ilustra caracteres adicionais escapados e especiais e indica que parte do padrão deve ser lembrado. Corresponde precisamente aos caracteres 'Capitulo ' seguidos por um ou mais caracteres numéricos (\d significa qualquer caracter numérico e + significa 1 ou mais vezes), seguidos por um ponto decimal (que é um caracter especial; preceder com um \ significa que a expressão regular deve buscar pelo caracter literal '.'), seguido por qualquer caracter numérico 0 ou mais vezes (\d significa caracter numérico, * significa 0 ou mais vezes). Além disso, os parenteses são usados para relembrar os primeiros caracteres numéricos correspondentes.
Esse padrão é encontrado em "Abra o capitulo 4.3, parágrafo 6" o '4' é relembrado. O padrão não é encontrado em "Capitulo 3 e 4", porque essa string não tem um período após o '3'.
Para encontrar uma substring sem que a correspondência seja relembrada, dentro dos parênteses inicie o padrão com ?:. Por exemplo, (?:\d+) corresponde a um ou mais caracteres numéricos mas não relembra os caracteres correspondentes.
Trabalhando com expressões regulares
Expressões Regulares são usadas com os metodos test e exec do objeto RegExp e com os metodos match, replace, search, e split do objeto String. Estes metodos são explicados em detalhe em JavaScript Reference.
Tabela 4.2 Metodos que usam Expressões regulares Metodo Descrição
exec Um método RegExp que execute uma pesquisa por uma correspondência em uma string. Retorna um array de informações.
test Um método RegExp que testa uma correspondência em uma string. Retorna true ou false.
match Um método String que executa uma pesquisa por uma correspondência em uma string. Retorna uma array de informações ou null caso não haja uma correspondência.
search Um método String que testa uma correspondência em uma string. Retorna o indice da correspondência ou -1 se o teste falhar.
replace Um método String que executa uma pesquisa por uma correspondência em uma string, e substitui a substring correspondênte por uma substring de substituição.
split Um método String que usa uma expressão regular ou uma string fixa para quebrar uma string dentro de um array de substrings.
Quando você quer saber se um padrão é encontrado em uma string, use o método test ou search; para mais informações (mas execução mais lenta) use o método exec ou match. Se você usar exec ou match e se houver correspondência, estes métodos retornam um array e atualizam as propriedades do objeto da expressão regular associada e também do objeto da expressão regular predfinada RegExp. Se não houver corespondência, o método exec retorna null (convertido para false).
No seguinte exemplo, o script usa o método exec para encontrar uma correspondência em uma string.
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
Se você não precisa acessar as propriedades da expressão regular, uma alternativa de criar myArray é com esse script:
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
Se você quiser construir a expressão regular a partir de uma string, outra alternativa é esse script:
var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
Com esses scripts, a correspondência é encontrada o array é retornado e são atualizadas as propriedades mostradas na tabela a seguir.
Table 4.3 Resultados da execução de expressões regulares. Objeto Propriedade or indice Descrição Nesse exemplo
myArray A string correspondente e todas as substrings relembradas. ["dbbd", "bb"]
index O índice do encontro em relação à string original. 1
input A string original. "cdbbdbsbz"
[0] Os últimos caracteres encontrados. "dbbd"
myRe lastIndex O índice no qual iniciar a próxima partida. (Esta propriedade é configurada apenas se a expressão regular usar a opção g, descrita em Advanced Searching With Flags.) 5
source O texto da expressão regular. Atualizado quando a expressão é criada, não executada. "d(b+)d"
Como mostrado na segunda forma deste exemplo, você pode usar uma expressão regular criada com um inicializador de objeto sem atribuí-la à uma variável. Contudo, se você o fizer, toda ocorrência é uma nova expressão regular. Assim sendo, se você usar esta forma sem atribuí-la à uma variável, você não pode subsequentemente acessar as propriedades da expressão regular. Assumamos que tenha este script, por exemplo:
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("O útltimo índice é " + myRe.lastIndex);
Este script mostra:
O último índice é 5
Contudo, se tem este script:
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log("O último índice é " + /d(b+)d/g.lastIndex);
Ele mostra:
O último índice é 0
As ocorrências de /d(b+)d/g nas duas declarações são objetos expressões regulares diferentes e consequentemente têm diferentes valores para suas propriedades lastIndex. Se precisa acessar as propriedades de uma expressão regular criada com um inicializaor de objeto, você deve primeiro atribuí-la à uma variável.
Usando as Substrings entre Parênteses na Expressão Regular
A inclusão de parênteses em um padrão de expressão regular faz com que a sub-correspondência correspondente seja lembrada. Por exemplo, /a(b)c/ corresponde aos caracteres 'abc' e lembra 'b'. Para recuperar essas correspondências de substring entre parênteses, use o Arra[1], ..., [n].
O número de substring entre parênteses possíveis é ilimitado. A matriz retornada contém tudo o que foi encontrado. Os exemplos a seguir ilustram como usar parênteses entre parênteses.
Exemplo 1
O script a seguir usa o método replace() para alternar as palavras na string. Para o texto de substituição, o script usa o $1 e $2 na substituição para indicar a primeira e a segunda correspondências de substring entre parênteses.
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
Isto imprime "Smith, John".
Pesquisa avançada com Flags
As expressões regulares possuem quatro flags opcionais as quais se incluem a pesquisa global e case insensitive. Para realizar uma pesquisa global, utilize a flag g. Para realizar uma pesquisa sem diferenciar letras maiúsculas de minúsculas, utilize a flag i. Para realizar uma pesquisa multi-linhas, utilize a flag m. Ao realizar uma pesquisa "sticky", o ponto de partida será a posição corrente da string alvo, use com a flag y.Estas flags podem ser usadas separadamente ou juntas, em qualquer ordem, e serão inclusas como parte da expressão regular.
Firefox 3 note: Suporte para o sinalizador y foi adicionado no Firefox 3.
O sinalizador y falha se a correspondência não for bem-sucedida na posição atual na cadeia de destino.
Para incluir um sinalizador com a expressão regular, use esta sintaxe:
var re = /pattern/flags;
ou
var re = new RegExp("pattern", "flags");
Observe que os sinalizadores são parte integrante de uma expressão regular. Eles não podem ser adicionados ou removidos posteriormente.
Por exemplo, re = /\w+\s/g cria uma expressão regular que procura um ou mais caracteres seguidos por um espaço e procura essa combinação em toda a cadeia.
var re = /\w+\s/g;
var str = "fee fi fo fum";
var myArray = str.match(re);
console.log(myArray);
Isso exibe ["fee ", "fi ", "fo "]. Neste exemplo, você pode substituir a linha
var re = /\w+\s/g;
por:
var re = new RegExp("\\w+\\s", "g");
e obtenha o mesmo resultado.
O sinalizador m é usado para especificar que uma sequência de entrada de múltiplas linhas deve ser tratada como várias linhas. Se o sinalizador m for usado, ^ e $ combinam no início ou no final de qualquer linha na sequência de entrada, em vez do início ou no final de toda a sequência.
Exemplos
Os exemplos que se seguem mostram mais usos expressões regulares.
Alterando o pedido em uma string de entrada
O exemplo a seguir ilustra a formação de expressões regulares e o uso de string.split() e string.replace(). Ela limpa uma string de entrada formatada com nomes (primeiro nome sobrenome) separados por espaço em branco, tabulações e exatamente um ponto e virgula. Por fim, inverte a ordem do nome (sobrenome e primeiro nome) e ordena a lista
// A cadeia de nomes contém vários espaços e guias,
// e pode ter vários espaços entre o nome e o sobrenome.
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var output = ["---------- String original\n", names + "\n"];
// Prepare dois padrões de expressão regular e armazenamento em array.
// Divide a string em elementos da matriz.
// pattern: possível espaço em branco, em seguida, ponto e vírgula, em seguida, possível espaço em branco
var pattern = /\s*;\s*/;
// Quebra string em pedaços separados pelo padrão acima e
// armazene as partes em uma matriz chamada nameList
var nameList = names.split(pattern);
// new pattern: um ou mais caracteres, espaços e caracteres.
// Use parênteses para "memorizar" partes do padrão.
// As partes memorizadas são referenciadas mais tarde.
pattern = /(\w+)\s+(\w+)/;
// Nova matriz para armazenar nomes sendo processados.
var bySurnameList = [];
// Exibe a matriz de nomes e preenche a nova matriz
// com nomes separados por vírgula, último primeiro.
//
// O método replace remove qualquer coisa que corresponda ao padrão
// e substitui-o pela sequência memorizada - segunda parte memorizada
// seguido por espaço de vírgula seguido pela primeira parte memorizada.
//
// As variáveis $ 1 e $ 2 se referem às partes
// memorizado enquanto corresponde ao padrão.
output.push("---------- Após Separar pela Expressão Regular");
var i, len;
for (i = 0, len = nameList.length; i < len; i++){
output.push(nameList[i]);
bySurnameList[i] = nameList[i].replace(pattern, "$2, $1");
}
// Exibe a nova matriz.
output.push("---------- Nomes Invertidos");
for (i = 0, len = bySurnameList.length; i < len; i++){
output.push(bySurnameList[i]);
}
// Classifica pelo sobrenome e exibe a matriz classificada.
bySurnameList.sort();
output.push("---------- Ordenado");
for (i = 0, len = bySurnameList.length; i < len; i++){
output.push(bySurnameList[i]);
}
output.push("---------- Fim");
console.log(output.join("\n"));
Usando caracteres especiais para verificar entradas
No exemplo a seguir, é esperado que o usuário informe um número de telefone. Quando o usuário pressionar o botão "Check", o script verificará a validade do número. Se o número for válido (a sequência de caracteres especificada corresponderá a expressão regular), então, o script exibe uma mensagem agradecendo o usuário e confirmando o seu número. Se o número for inválido, o script informa ao usuário que o número de telefone não é válido.
A expressão regular procura por zero ou uma ocorrência de parênteses de abertura \(?, seguido de três dígitos \d{3}, seguido de zero ou uma ocorrência de parênteses de fechamento \)?, seguido de um hífen, barra ou ponto decimal e, quando encontrado, guarda o caractere ([-\/\.]), seguido de três dígitos \d{3}, seguido por um caractere de hífen, barra ou ponto decimal que fora guardado \1, seguido por quatro dígitos \d{4}.
Com o evento Change ativo, quando o usuário pressionar Enter, o valor será capturado por RegExp.input.
Subexpressão)
ou
(?'Nome'Subexpressão) Captura a subexpressão correspondente em um grupo nomeado. (?\w)\k "ee" em "deep"
(?Subexpressão)
ou
(?'name1-name2'Subexpressão) Especifica uma definição de grupo de balanceamento. Para saber mais, confira a seção "Definição de grupo de balanceamento" em Constructos de agrupamento. (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ "((1-3)*(3-1))" em "3+2^((1-3)*(3-1))"
(?:Subexpressão) Define um grupo de não captura. Write(?:Line)? "WriteLine" em "Console.WriteLine()"
"Write" em "Console.Write(value)"
(?imnsx-imnsx:Subexpressão) Aplica ou desabilita as opções especificadas em subexpressão. Para obter mais informações, consulte Opções de Expressão Regular. A\d{2}(?i:\w+)\b "A12xl" e "A12XL" em "A12xl A12XL a12xl"
(?=Subexpressão) Asserções lookahead positivas de largura zero. \b\w+\b(?=.+and.+) "cats", "dogs"
em
"cats, dogs and some mice."
(?!Subexpressão) Asserções lookahead negativas de largura zero. \b\w+\b(?!.+and.+) "and", "some", "mice"
em
"cats, dogs and some mice."
(?<=Subexpressão) Asserção lookbehind positiva de largura zero. \b\w+\b(?<=.+and.+)
———————————
\b\w+\b(?<=.+and.*) "some", "mice"
em
"cats, dogs and some mice."
————————————
"and", "some", "mice"
em
"cats, dogs and some mice."
(?Subexpressão) Grupo atômico. (?>a|ab)c "ac" Em"ac"
nada em"abc"
Soluções alternativas em um relance
Quando o mecanismo de expressão regular atinge uma expressão solução alternativa, ele usa uma subcadeia de caracteres que alcança da posição atual até o início (lookbehind) ou final (lookahead) da cadeia de caracteres original e, em seguida, é executado Regex.IsMatch nessa subcadeia de caracteres usando o padrão de pesquisa. O sucesso do resultado dessa subexpressão é então determinado por se é uma afirmação positiva ou negativa.
Solução alternativa Nome Função
(?=check) Lookahead positivo Afirma que o que segue imediatamente a posição atual na cadeia de caracteres é "verificar"
(?<=check) Lookbehind positivo Afirma que o que precede imediatamente a posição atual na cadeia de caracteres é "verificar"
(?!check) Lookahead negativo Afirma que o que segue imediatamente a posição atual na cadeia de caracteres não é "verificar"
(? Referência inversa nomeada. Corresponde ao valor de uma expressão nomeada. (?\w)\k "ee" em "seek"
Construtores de alternância
Os constructos de alternância modificam uma expressão regular para habilitar uma correspondência do tipo um/ou outro. Esses constructos incluem os elementos de linguagem listados na tabela a seguir. Para saber mais, confira Constructos de alternância.
Constructo de alternância Descrição Padrão Correspondências
| Corresponde a qualquer elemento separado pelo caractere de barra vertical (|). th(e|is|at) "the" e "this" em "this is the day."
(?(Expressão)Sim|Não)
ou
(?(Expressão)Sim) Corresponde a yes se o padrão de expressão regular designado por expression for correspondente. Do contrário, corresponde à parte no opcional. expressão é interpretado como uma asserção de largura zero.
Para evitar ambiguidade com um grupo de captura nomeado ou numerado, você pode usar opcionalmente uma declaração explícita, como esta:
(?( (?=Expressão) )Sim|Não) (?(A)A\d{2}\b|\b\d{3}\b) "A10" e "910" em "A10 C103 910"
(?(Nome)Sim|Não)
ou
(?(Nome)Sim) Corresponde a yes se name, um grupo de captura nomeado ou numerado, apresenta uma correspondência. Do contrário, corresponde a no opcional. (?")?(?(quoted).+?"|\S+\s) "Dogs.jpg " e "\"Yiska playing.jpg\"" em "Dogs.jpg \"Yiska playing.jpg\""
Substituições
As substituições são elementos de linguagem de expressões regulares com suporte em padrões de substituição. Para saber mais, confira Substituições. Os metacaracteres listados na tabela a seguir são asserções atômicas de largura zero.
Caractere Descrição Padrão Padrão de substituição Cadeia de caracteres de entrada Cadeia de caracteres de resultado
$Número Substitui a subcadeia de caracteres correspondida pelo grupo number. \b(\w+)(\s)(\w+)\b $3$2$1 "one two" "two one"
${Nome} Substitui a substring de caracteres correspondida pelo grupo chamado nome. \b(?\w+)(\s)(?\w+)\b ${word2} ${word1} "one two" "two one"
$$ Substitui um literal "$". \b(\d+)\s?USD $$$1 "103 USD" "$103"
$& Substitui uma cópia da correspondência inteira. \$?\d*\.?\d+ **$&** "$1.30" "**$1.30**"
$` Substitui todo o texto da cadeia de caracteres de entrada antes da correspondência. B+ $` "AABBCC" "AAAACC"
$' Substitui todo o texto da cadeia de caracteres de entrada após a correspondência. B+ $' "AABBCC" "AACCCC"
$+ Substitui o último grupo que foi capturado. B+(C+) $+ "AABBCCDD" "AACCDD"
$_ Substitui a cadeia de caracteres de entrada inteira. B+ $_ "AABBCC" "AAAABBCCCC"
Opções de expressões regulares
Você pode especificar opções que controlam como o mecanismo de expressões regulares interpreta uma expressão regular padrão. Muitas dessas opções podem ser especificadas de maneira embutida (no padrão da expressão regular) ou como uma ou mais constantes RegexOptions. Essa referência rápida lista somente as opções embutidas. Para obter mais informações sobre opções embutidas e RegexOptions, consulte o artigo Opções de expressões regulares.
É possível especificar uma opção embutida de duas formas:
Usando a construção(?imnsx-imnsx) diversa, em que um sinal de menos (-) antes de uma opção ou conjunto de opções desativa essas opções. Por exemplo, (?i-mn) ativa a correspondência sem diferenciação de maiúsculas e minúsculas (i), desativa o modo de várias linhas (m) e desativa capturas de grupo sem nome (n). A opção se aplica ao padrão de expressão regular no ponto em que a opção é definida e entra em vigor no final do padrão ou no ponto em que outro constructo inverte a opção.
Usando asubexpressão de construção)(?imnsx-imnsx: de agrupamento, que define as opções somente para o grupo especificado.
O mecanismo de expressão regular do .NET dá suporte às seguintes opções embutidas:
Opção Descrição Padrão Correspondências
i Use correspondência sem diferenciação de maiúsculas e minúsculas. \b(?i)a(?-i)a\w+\b "aardvark" e "aaaAuto" em "aardvark AAAuto aaaAuto Adam breakfast"
m Use o modo multilinha. ^ e $ correspondem ao início e ao fim de uma linha em vez do início e fim de uma cadeia de caracteres. Para obter um exemplo, consulte a seção "Modo multilinha" nas Opções de Expressão Regular.
n Não capture grupos sem nome. Para obter um exemplo, consulte a seção "Somente Capturas Explícitas" nas Opções de Expressão Regular.
s Use o modo de linha única. Para obter um exemplo, consulte a seção "Modo de linha única" nas Opções de Expressão Regular.
x Ignore espaços em branco sem escape no padrão da expressão regular. \b(?x) \d+ \s \w+ "1 aardvark" e "2 cats" em "1 aardvark 2 cats IV centurions"
Constructos diversos
Os constructos diversos modificam um expressão regular padrão ou fornecem informações sobre ela. A tabela a seguir lista os constructos diversos que têm suporte no .NET. Para saber mais, confira Constructos diversos.
Constructo Definição Exemplo
(?imnsx-imnsx) Define ou desabilita opções como não diferenciação de maiúsculas e minúsculas no meio de um padrão. Para saber mais, confira Opções de expressão regular. \bA(?i)b\w+\b corresponde a "ABA" e "Able" em "ABA Able Act"
(?#Comentário) Comentário embutido. O comentário é encerrado no primeiro caractere de fechar parênteses. \bA(?#Matches words starting with A)\w+\b
# [até o final da linha] Comentário do modo X. O comentário começa em um # sem escape e continua até o final da linha. (?x)\bA\w+\b#Matches words starting with A
*********************************************************************************
Regex caracteres especiais obrigatório
Perguntada 3 anos, 7 meses atrás
Modified 1 ano, 3 meses atrás
Vista 12mil vezes
0
Preciso criar um regex para validar senha.
Ela deverá conter no mínimo 8 caracteres, dos quais deve possuir no mínimo 1 letra, 1 número e 1 caractere especial.
java
android
regex
Compartilhar
Melhore esta pergunta
Seguir
editada 1/12/2018 às 10:03
user avatar
hkotsubo
61mil2323 medalhas de ouro6969 medalhas de prata127127 medalhas de bronze
perguntada 1/12/2018 às 0:20
user avatar
Marcelo
1111 medalhas de ouro11 medalhas de prata44 medalhas de bronze
1
Marcelo, acredito que esse tipo de pergunta já tenha sido respondida dezenas de vezes e você pode encontrar a resposta no Google. Veja esse link –
Andre
1/12/2018 às 1:18
2
Leitura obrigatória para quem é da área: xkcd.com/936 ; se deseja usar esse esquema de segurança, saiba que ele é falido por definição. O único jeito de garantir que a entropia da senha a torne forte contra ataques brutos é com o seu tamanho. A força para quebrar uma senha de d dígitos sobre um alfabeto de A caracteres distintos é O(A**d); daí, se você apenas subir o A, o quanto que você ganha de complexidade é minguante perante o aumento na quantidade de dígitos –
Jefferson Quesado
1/12/2018 às 3:36
Não é exatamente o que vc quer (é quase) mas já dá pra ter uma ideia: pt.stackoverflow.com/a/337981/112052 - e sobre caracteres especiais: pt.stackoverflow.com/a/342737/112052 –
hkotsubo
1/12/2018 às 10:01
o que você considera um caractere especial amigo? poderia listar alguns exemplos? –
Paz
6/12/2018 às 15:08
Obrigado pessoal –
Marcelo
14/08/2019 às 15:09
Adicione um comentário
2 Respostas
Ordenado por:
1
Regex Usada
Essa regex faz a validação, você pode testa-la aqui:
(?=.*[}{,.^?~=+\-_\/*\-+.\|])(?=.*[a-zA-Z])(?=.*[0-9]).{8,}
Lembrando que você deve usar duplo escape aonde tem o caractere \, então no código Java todos as barras invertidas devem ser duplas, ficando \\.
Aplicação no código Java
No código Java você pode fazer a validação com String.matches, do jeito que mostrei abaixo:
public class JavaFiddle
{
public static void main(String[] args)
{
System.out.println("A{123456".matches("(?=.*[}{,.^?~=+\\-_\\/*\\-+.\\|])(?=.*[a-zA-Z])(?=.*[0-9]).{8,}")); //exemplo que passa
System.out.println("ASD1ASDA".matches("(?=.*[}{,.^?~=+\\-_\\/*\\-+.\\|])(?=.*[a-zA-Z])(?=.*[0-9]).{8,}")); //exemplo que nao passa (falta caractere especial)
System.out.println("ASDAS^^?".matches("(?=.*[}{,.^?~=+\\-_\\/*\\-+.\\|])(?=.*[a-zA-Z])(?=.*[0-9]).{8,}")); //exemplo que nao passa (falta numero)
System.out.println("123^8542".matches("(?=.*[}{,.^?~=+\\-_\\/*\\-+.\\|])(?=.*[a-zA-Z])(?=.*[0-9]).{8,}")); //exemplo que nao passa (falta letra)
System.out.println("WWEA^^1".matches("(?=.*[}{,.^?~=+\\-_\\/*\\-+.\\|])(?=.*[a-zA-Z])(?=.*[0-9]).{8,}")); //exemplo que nao passa (nao tem minimo de 8 caracteres)
}
}
Este código exibe true no console quando for um padrão válido, e false para padrões inválidos.
Você pode testar esse código no JavaFiddle como eu fiz também, só copiar e colar o código dessa resposta.
OBS: Como não foi especificado quais seriam os caracteres especiais eu utilizei como válidos os seguintes caracteres (,.^?~=+-_/*\+)
Você pode alterar os caracteres que entram como caracteres especiais nessa parte da regex:
(?=.*[}{,.^?~=+\-_\/*\-+.\|]), só não retire a parte (?= ... ), pois isso sinaliza um positive lookahead, que é necessário para validar que existe pelo menos um dos caracteres sinalizados no grupo antes de iniciar a captura.
Explicação da Regex
(?=.*...) - É um positive lookahead que irá garantir que o grupo de caracteres a seguir DEVE estar na string para que ela seja validada.
[}{,.^?~=+\-_\/*\-+.\|] - É o set que define quais caracteres podem ser capturados pelo positive lookahead.
(?=.*...) - É um positive lookahead que irá garantir que o grupo de caracteres a seguir DEVE estar na string para que ela seja validada.
[a-zA-Z] - É o set que caracteriza qualquer caractere de letra sendo maiúscula ou minúscula.
(?=.*...) - É um positive lookahead que irá garantir que o grupo de caracteres a seguir DEVE estar na string para que ela seja validada.
[0-9] - É o set que caracteriza qualquer número entre 0 e 9.
.{8,} - Após essas validações, será capturado uma sequencia de qualquer caractere que não contenha quebra de linhas(sinalizado pelo .).
E que seja de comprimento mínimo de 8 caracteres (sinalizado pelo {8,}), sem limite máximo (caso queira definir um limite você pode colocar o número máximo de caractere após a ,).
EDITADO
Obrigado ao usuário @hkotsubo por me avisar do meu erro
Compartilhar
Melhore esta resposta
Seguir
editada 6/12/2018 às 17:29
respondida 6/12/2018 às 16:17
user avatar
Paz
3.14211 medalhas de ouro1111 medalhas de prata3838 medalhas de bronze
Na verdade o . aceita espaços sim, veja aqui. E aceita qualquer outro caractere que não foi especificado anteriormente: regex101.com/r/8rtOcc/2 (não que isso seja problema, já que a pergunta não deixa claro o que é pra ter ou não) –
hkotsubo
6/12/2018 às 16:47
1
@hkotsubo aí você me pegou kkk, eu quis dizer quebra de linha, erro meu. Vou corrigir. –
Paz
6/12/2018 às 17:27
1
É, por padrão o . não considera quebras de linha. Mas - por curiosidade - é possível fazer com que considere, usando a opção DOTALL: ideone.com/rAxncr –
hkotsubo
6/12/2018 às 17:34
Top muito obrigado! –
Marcelo
14/08/2019 às 15:08
@Marcelo considere marcar a resposta como correta, se ela te respondeu a duvida inicial –
Paz
14/08/2019 às 16:54
Adicione um comentário
0
Boa tarde.
Estou usando o FluentValidation e fiz algumas validações para senha hoje. Vê se isso te ajuda (Caso tive alguma dúvida do código me fale):
using FluentValidation;
using System.Linq;
using System.Text.RegularExpressions;
namespace SaleTheaterTickets.Models.ViewModelValidators
{
public class RegisterViewModelValidator : AbstractValidator
{
public RegisterViewModelValidator()
{
RuleFor(x => x.Email)
.NotEmpty().WithMessage("Informe o e-mail")
.EmailAddress().WithMessage("Digite um e-mail válido (ana@gmail.com)");
RuleFor(x => x.Password)
.NotEmpty().WithMessage("Informe a senha")
.Length(6, 20).WithMessage("Senha deve ter no mínimo 6 e no máximo 20 caractéres")
.Must(RequireDigit).WithMessage("Senha deve ter pelo menos 1 número")
.Must(RequiredLowerCase).WithMessage("Senha deve ter pelo menos 1 caracter minúsculo")
.Must(RequireUppercase).WithMessage("Senha deve ter pelo menos 1 caracter maiúsculo")
.Must(RequireNonAlphanumeric).WithMessage("Digite pelo menos 1 caracter especial (@ ! & * ...)");
RuleFor(x => x.ConfirmPassword)
.NotEmpty().WithMessage("Confirme a senha")
.Equal(x => x.Password).WithMessage("Senhas não conferem");
}
private bool RequireDigit(string password)
{
if (password.Any(x => char.IsDigit(x)))
{
return true;
}
return false;
}
private bool RequiredLowerCase(string password)
{
if (password.Any(x => char.IsLower(x)))
{
return true;
}
return false;
}
private bool RequireUppercase(string password)
{
if (password.Any(x => char.IsUpper(x)))
{
return true;
}
return false;
}
private bool RequireNonAlphanumeric(string password)
{
//if (password.Any(x => char.IsSymbol(x)))
//{
// return true;
//}
//return false;
if (Regex.IsMatch(password, "(?=.*[@#$%^&+=])"))
{
return true;
}
return false;
}
}
}
OBS: Os métodos estão inglês, mas eles servem para o seguinte:
RequireDigit - pelo menos 1 número na senha RequiredLowerCase - pelo menos 1 letra minúscula na senha RequireUppercase - pelo menos 1 letra maiúscula na senha RequireNonAlphanumeric - pelo menos um caractere especial na senha
OBS: O Asp.Net Core Identity já faz essas verificações, porém eu não estava conseguindo traduzir as mensagens que vinham como padrão, então peguei e criei cada validação por conta própria (seguindo as validações que vi na documentação que o Identity faz para senha) para poder gerar minhas frases em português.
Espero que te ajude de alguma forma!
*************************************************************************
Expressões regulares: introdução
Idéia básica
Uma expressão regular é uma notação para representar padrões em strings. Serve para validar entradas de dados ou fazer busca e extração de informações em textos.
Por exemplo, para verificar se um dado fornecido é um número de 0,00 a 9,99 pode-se usar a expressão regular \d,\d\d, pois o símbolo \d é um curinga que casa com um dígito.
O verbo casar aqui está sendo usado tradução para match, no sentido de combinar, encaixar, parear. Dizemos que a expressão \d,\d\d casa com 1,23 mas não casa com 123 (falta a vírgula) nem com 1,2c (“c” não casa com \d, porque não é um dígito).
O termo em inglês é regular expression de onde vem as abreviações regex e re (o nome do módulo Python). Na ciência da computação, o termo tem um significado bem específico (veja expressão regular no Glossário).
Algums exemplos
Veja alguns exemplos com breves explicações para ter uma idéia geral:
\d{5}-\d{3}
O padrão de um CEP como 05432-001: 5 dígitos, um - (hífen) e mais 3 dígitos. A sequência \d é um metacaractere, um curinga que casa com um dígito (0 a 9). A sequência {5} é um quantificador: indica que o padrão precedente deve ser repetido 5 vezes, portanto \d{5} é o mesmo que \d\d\d\d\d.
[012]\d:[0-5]\d
Semelhante ao formato de horas e minutos, como 03:10 ou 23:59. A sequência entre colchetes [012] define um conjunto. Neste caso, o conjunto especifica que primeiro caractere deve ser 0, 1 ou 2. Dentro dos [] o hífen indica uma faixa de caracteres, ou seja, [0-5] é uma forma abreviada para o conjunto [012345]; o conjunto que representa todos os dígitos, [0-9] é o mesmo que \d. Note que esta expressão regular também aceita o texto 29:00 que não é uma hora válida (horas válidas serão o tema de um dos Exercícios).
[A-Z]{3}-\d{4}
É o padrão de uma placa de automóvel no Brasil: três letras de A a Z é seguidas de um - (hífen) seguido de quatro dígitos, como CKD-4592.
Sobre os sinais «» usados neste texto
Ao descrever de modo genérico alguma parte da sintaxe das expressões regulares usamos neste documento os símbolos «», para indicar uma parte que deve ser fornecida pelo usuário.
Por exemplo, a referência a um grupo tem a sintaxe \«n» onde «n» é o número do grupo a ser recuperado. Os sinais «» não fazem parte da sintaxe, então a referência ao terceiro grupo escreve-se como \3.
De modo semelhante, a sintaxe de quantificador moderado é «q»?, onde «q» é qualquer quantificador, como * em *? ou {1,3} no caso de {1,3}?.
Metacaracteres
Um metacaractere é um caractere ou sequência de caracteres com significado especial em expressões regulares. Os metacaracteres podem ser categorizados conforme seu uso.
Especificadores
Especificam o conjunto de caracteres a casar em uma posição.
metacaractere conhecido como significado
. curinga qualquer caractere, exceto a quebra de linha \n (ver flag_dotall)
[...] conjunto qualquer caractere incluido no conjunto
[^...] conjunto negado qualquer caractere não incluido no conjunto
\d dígito o mesmo que [0-9]
\D não-digíto o mesmo que [^0-9]
\s branco espaço, quebra de linha, tabs etc.; o mesmo que [ \t\n\r\f\v]
\S não-branco o mesmo que [^ \t\n\r\f\v]
\w alfanumérico o mesmo que [a-zA-Z0-9_] (mas pode incluir caracteres Unicode; ver flag_unicode)
\W não-alfanumérico o complemento de \w
\ escape anula o significado especial do metacaractere seguinte; por exemplo, \. representa apenas um ponto, e não o curinga
Quantificadores
Definem o número permitido repetições da expressão regular precedente.
metacaractere significado
{n} exatamente n ocorrências
{n,m} no mínimo n ocorrências e no máximo m
{n,} no mínimo n ocorrências
{,n} no máximo n ocorrências
? 0 ou 1 ocorrência; o mesmo que {,1}
+ 1 ou mais ocorrência; o mesmo que {1,}
* 0 ou mais ocorrência
«q»? modera qualquer um dos quantificadores acima (ver Gula × moderação)
Veja o grupo de exercícios 1. Especificadores e quantificadores.
Âncoras
Estabelecem posições de referência para o casamento do restante da regex. Note que estes metacaracteres não casam com caracteres no texto, mas sim com posições antes, depois ou entre os caracteres.
metacaractere significado
^ início do texto, ou de uma linha com o flag re.MULTILINE
\A início do texto
$ fim do texto, ou de uma linha com o flag re.MULTILINE; não captura o \n no fim do texto ou da linha
\Z fim do texto
\b posição de borda, logo antes do início de uma palavra, ou logo depois do seu término; o mesmo que a posição entre \W e \w ou vice-versa
\B posição de não-borda
Veja o grupo de exercícios 2. Âncoras.
Agrupamento
Definem ou grupos ou alternativas.
metacaractere significado
(...) define um grupo, para efeito de aplicação de quantificador, alternativa ou de posterir extração ou re-uso
...|... alternativa; casa a regex à direita ou à esquerda
\«n» recupera o texto casado no n-ésimo grupo
Gula × moderação
Por default, todos os quantificadores são gulosos: tentam casar a maior quantidade possível de caracteres.
Para entender o que isso significa, considere que desejamos capturar o nome do primeiro tag (h1) no fragmento de HTML abaixo:
>>> html = ''
*************************************************************************************
Smart Rules
RegExp
Expressões regulares, também conhecidas como RegEx ou RegExp são usadas para englobar um padrão de caracteres usando alguns caracteres especiais.
Na GoCache, é possível utilizas essas expressões em alguns critérios das smart rules para que elas possam englobar situações mais complexas.
Caracteres especiais nas expressões regulares
Asterisco *: O asterisco aceita qualquer caractere qualquer número de vezes, importante saber que a GoCache interpreta o * como seria interpretado um .* no regex comum, exemplos de uso:
Critério URL: /*
URLs aceitos: / , /teste1 , /qualquer/coisa , /13/21fas/nkfasfp4242
Critério URL: /abc/*/def/
URLs aceitos: /abc//def/ , /abc/xyz/def/ , /abc/g/e/p/def/
URLs não aceitos: /abc/def/ , /abcdef/ , /ac//df/
Ponto .: O ponto é usado para especificar qualquer caractere uma vez. Exemplos de uso:
Critério URL: /.
URLs aceitos: /a , /1 , //
URLs não aceitos: / , /ab , /12
Critério URL: /.teste..
URLs aceitos: /1testeab , /oteste/a
URLs não aceitos: /teste , /testeabc
Colchetes []: Os colchetes são usados para especificar um grupo de caracteres que serão aceitos, esses grupos podem ser ou alguns caracteres especificados ou uma série de caracteres separados por um - como por exemplo [a-z] para ter todos os caracteres de a até z. Exemplos de uso:
Critério URL: /[abc][A1p]
URLs aceitos: /aA , /c1 , /bp , /cA
URLs não aceitos: /Aa , /aa , /aAa
Critério URL: /[a-z][1-9][A-Z]
URLs aceitos: /b2T , /x1B , /t9Z
URLs não aceitos: /A1a , /bds
Parênteses (): Os parênteses definem um grupo com uma expressão, diferente dos colchetes, os grupos definidos pelos parênteses atuam como uma expressão completa. Exemplos de uso:
Critério URL: /t(est)e
URLs aceitos: /teste
URLs não aceitos: /tse , /tee , /ttsee
Pipe |: O pipe é usado como um OU, ele aceita qualquer uma das duas expressões separadas por ele, normalmente utilizado com os parenteses. Exemplos de uso:
Critério URL: /(admin|wp-admin)/
URLs aceitos: /admin/ , /wp-admin/
URLs não aceitos: /adminwp-admin/ , /admin-wp/
Critério URL: /(teste1|admin|segredo|)
URLs aceitos: /teste1 , /admin , /segredo , /
URLs não aceitos: /teste1admin , /adminsegredo , /qualqueroutracoisa
Chaves {}: As chaves definem quantas vezes uma expressão deve aparecer, podendo ser definida uma série de quantidades separadas por uma vírgula (,) como por exemplo {5,7}. Exemplos de uso:
Critério URL: /(ab){1,3}/
URLs aceitos: /ab , /abab , /ababab
URLs não aceitos: /abababab , /aaa
Critério URL: /[a-z]{5}
URLs aceitos: /abcde , /teste , /admin
URLs não aceitos: /abc , /testee , /az
Sinal de adição +: O sinal de adição define que uma expressão pode aparecer uma ou mais vezes. Exemplos de uso:
Critério URL: /(ab)+/
URLs aceitos: /ab , /abab , /ababab , /ababababababababab
URLs não aceitos: /abababa , / , /aaaaaaa
Critério URL: /[a-z]+
URLs aceitos: /abcde , /testeteste , /adminaaaaaaa , /yz
URLs não aceitos: /123 , /ABC
Barra invertida \: A barra invertida é usada para usar o caractere literal, tirando a característica de caractere especial, por exemplo, ao usar o \. o ponto perde sua característica de aceitar qualquer caractere e aceita apenas um ponto mesmo. Exemplos de uso:
Critério URL: /imagem\.jpg
URLs aceitos: /imagem.jpg
URLs não aceitos: /imagemajpg , /imagem1jpg
Critério URL: /*\.(css|js)
URLs aceitos: /script.js , /style.css
URLs não aceitos: /scriptjs , /stylecss
Ponto de interrogação ?: O ponto de interrogação é usado para definir que pode ter ou não uma expressão especificada. Exemplos de uso:
Critério Cabeçalho de requisição: Teste:(te)?ste
Cabeçalhos aceitos: Teste:ste , Teste:teste
Cabeçalhos não aceitos: Teste:tste , Teste:
Critério Cabeçalho de requisição: Referer:https?://(*\.)?exemplo.com/
Cabeçalhos aceitos: Referer:http://exemplo.com/ , Referer:https://www.exemplo.com/
Cabeçalhos não aceitos: Referer:httpa://exemplo.com/ , Referer:https://aaaexemplo.com/
Cifrão $: O Cifrão é usado em ações ao invés de critérios, o Cifrão pega uma expressão que foi encontrada no critério e aplica essa expressão como uma variável na ação, dependendo da ordem que foram encontradas as expressões. Exemplos de uso:
Critério URL: http://exemplo.com/*
Acão de redirecionamento: https://exemplo.com/$1
Nesse caso se o url for http://exemplo.com/teste o redirecionamento será para https://exemplo.com/teste
Critério URL: http://exemplo.com/([a-z]+)([1-9]+)
Acão de redirecionamento: https://exemplo.com/$2$1
Nesse caso se o url for http://exemplo.com/teste123 o redirecionamento será para https://exemplo.com/123teste
Caracteres específicos
Nulo -: Esse caractere significa um valor vazio, funciona apenas para os critérios: User Agent e Referer Host. Se esse caractere for definido em um desses dois critérios, significa que ele aceitará um User Agent ou Referer Host sem nada. Exemplo de uso:
Critério User Agent: -
User Agent aceito:
Negação !: Esse caractere informa "tudo menos",funciona apenas para os critérios: User Agent; Referer Host e País. Exemplo de uso:
Critério User Agent: !abc
User Agent NÃO aceito: abc
Ambos os caracteres podem ser usados em conjunto com outros caracteres regex conforme mostra o exemplo abaixo:
Critério User Agent: !(abc[12]|-)
User Agents NÃO aceitos: abc1 , , abc2
Funcionamento de caracteres por critério
Importante reforçar que alguns caracteres não funcionam como expressões regulares para alguns critérios, aqui a lista de quais caracteres funcionam como expressões regulares para cada critério de smart rule:
Caracteres especiais que funcionam como regex por critério (Critério - Caracteres):
URL - Asterisco, Ponto, Colchetes, Parênteses, Pipe, Chaves, Sinal de adição e Barra invertida.
Conteúdo de Cookie - Todos os caracteres comuns são aceitos (Nesse critério o asterisco é considerado como aceitar o último caractere qualquer número de vezes, para usá-lo como ele é usado em outros critérios use .*)
Cookies - Ponto e Asterisco
User Agent - Todos os caracteres funcionam
HTTP Referer - Todos os caracteres funcionam
Cabeçalho de requisição - Todos os caracteres comuns funcionam
País de Origem - Pipe e negação
Endereço de IP ou Range - Nenhum funciona
Ações que aceitam o Cifrão($) como expressão regular:
As seguintes ações aceitam o Cifrão($), como uma expressão regular conforme explicado anteriormente: URL de destino e Sobrescreve URI.
Exemplos de uso de regex nas smart rules
Alguns exemplos de como os caracteres especiais podem trabalhar em conjunto para criar algumas regras avançadas:
Redirecionamento de http para https
redirect
Critério URL: http://exemplo.com.br Ação redirecionar URL: https://$1exemplo.com.br$2
Essa regra redireciona todo tráfego http de qualquer subdomínio para https. Os wildcards pegam qualquer subdomínio e qualquer caminho com os cifrões, as informações encontradas são recolocadas no url com https.
CORS específico para algumas origens
redirect
Critério URL: /imagem.png Critério cabeçalho de requisição: Origin:https?://(*\.)?quero-uma\.imagem Ação Define Cross-Origin: *
Essa regra retorna o wildcard para o cabeçalho CORS apenas para as origens que se encaixam no regex, o regex aceitará http ou https graças ao ? depois do s, além disso ele aceitará qualquer subdomínio de quero-uma.imagem graças ao (*\.), que aceita qualquer número de caracteres antes do ponto, além disso, é necessária uma \ antes do ponto para poder aceitar o ponto ao invés de qualquer caractere.
************************************************************************************************************