Durante muito tempo fiz aquelas funções mirabolantes para validação, recuperar apenas números, apenas textos e etc. Com a compreensão do Regex, estas tarefas foram sendo facilitadas, vou iniciar uma série de informações sobre Regex (Regular-Expression). Vamos utilizar a biblioteca “Microsoft VBScript Regular Expression 5.5” que está em “c:\Windows\system32\vbscript.dll”.

Vamos iniciar selecionando a referência no projeto:

referencia_vbscript

Ao incluir a referência, conseguimos acessar as classes, RegExp, Match, MatchCollection e etc.

Agora vamos imagina que queremos, em uma expressão (String) recuperar somente os caracteres numéricos. Bastaria indicarmos que queremos apenas números para o pattern do Regex. Vamos ver na prática como funciona.

Option Compare Database
Option Explicit



Public Sub Testar()

MsgBox (SomenteNumeros("Alexandre Minato 123----++adasjdlak"))

End Sub



Public Function SomenteNumeros(Expressao As String) As Integer

Dim regex As RegExp
Dim encontrados As MatchCollection

Set regex = New RegExp
regex.Global = True 'Indico que as configurações servirão para todos os métodos da classe
regex.IgnoreCase = True 'Ignoro Case Sensitive
regex.Pattern = "[0-9]" 'Indico que quero apenas números de "0 até 9"

Set encontrados = regex.Execute(Expressao) 'seto a instancia da classe com a execução do Regex

Dim strRetorno As String
Dim encontrado As Match

For Each encontrado In encontrados

'Concateno a string com o resultado
strRetorno = strRetorno + encontrado.Value
Next

SomenteNumeros = CInt(strRetorno)

End Function

SomenteNumeros("Alexandre Minato 123----++adasjdlak"))

End Sub

Public Function SomenteNumeros(Expressao As String) As Integer

Dim regex As RegExp
Dim encontrados As MatchCollection

Set regex = New RegExp
regex.Global = True 'Indico que as configurações servirão para todos os métodos da classe
regex.IgnoreCase = True 'Ignoro Case Sensitive
regex.Pattern = "[0-9]" 'Indico que quero apenas números de "0 até 9"

Set encontrados = regex.Execute(Expressao) 'seto a instancia da classe com a execução do Regex

Dim strRetorno As String
Dim encontrado As Match

For Each encontrado In encontrados

'Concateno a string com o resultado
strRetorno = strRetorno + encontrado.Value
Next

SomenteNumeros = CInt(strRetorno)

End Function

Beleza, até agora apenas uma forma diferente de verificar números, porém, e se quisermos criar um método que retorne apenas String? Tradicionalmente faríamos uma lógica que faria um for, verificaria se é número e não concatenaria. Com regex bastaria alterarmos o Pattern, que ficaria assim:

regex.Pattern = “^[0-9]”

Pronto! Pois, o “^” indica negação, ou seja, tudo que não for digito (numero) de 0 à 9.

Agora vamos um pouco além. Imagine que você tem um gerador de relatório, com vários formatos. Imagine o trabalho para configurar cada relatório, com padrões totalmente diferente, completar com espaço, com zeros, com quaiquer caracteres. Imagine se você pudesse fazer algo assim:

Suponha que sua Tabela seja tbCliente e que tenha os campos IDCliente, NomeCliente, DataNascimento.

e que pudesse simplesmente definir o formato, como por exemplo:

Select: Select * from tbCliente

Formato: {IDCliente:0000}{NomeCliente:!@           }{DataNascimento:dd/mm/yyyy}

Como você faria isso?… no próximo artigo vou mostrar como podemos fazer isso de uma forma muito simples!

Até a próxima.