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:
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.
54b88be9-276e-4d73-876d-771de253f880|4|5.0