O Operador LIKE
Introdução
A validação de campos é um processo essencial em qualquer aplicação. É importante determinar se o utilizador introduz os dados correctamente e para tal, o programador terá que prevêr uma série de situações que podem ocorrer. Existem muitas formas de proceder a estas verificações, umas mais simples que outras. O operador LIKE
é, no mínimo, mais um reforço aliado à batalha contra a má validação de campos.
Como?
O operador LIKE
opera sobre uma string. A string é comparada com um padrão fornecido para determinar se todos os caracteres da string se encontram em conformidade com o padrão. Uma operação com LIKE
devolve-nos um Boolean
, determinando assim se a string se encontra de acordo com o padrão fornecido (True
) ou não (False
).
As opções do padrão
O padrão de comparação pode conter qualquer caractere e ainda as seguintes opções:
Opção | Explicação | Exemplo |
---|---|---|
* |
Sequência indeterminada de quaisquer caracteres | João * |
? |
Qualquer caractere | Imagem.??? |
# |
Qualquer caractere numérico (0 a 9) | Número # |
[caracteres] |
Um caractere incluí caracteres desta lista de caracteres | [aeiou] |
[!caracteres] |
Um caractere não incluí caracteres desta lista de caracteres | [!aeiou] |
[letra-letra] |
Um caractere incluí caracteres de uma letra até outra. Múltiplos alcances suportados | [a-zA-Z][A-Z]# |
[!letra-letra] |
Um caractere não incluí caracteres de uma letra até outra. Múltiplos alcances suportados | [a-uA-U][x-zX-Z]# |
Importante: A aplicação do padrão com caracteres é case-sensitive.
Exemplos
Para melhor entender o operador LIKE
, copie o seguinte bloco de código e substitua por todo o código de uma form num projecto novo. Irá obter uma mensagem com todos os pareceres das comparações. O seguinte código cria uma lista de strings para ir de seguida correr todas as comparações por cada item, determinando assim em que validações é que essa string passa. Este exemplo visa a utilizar o maior número de variações do padrão possíveis de forma a demonstrar o seu poder.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim L As New ListBox
L.Items.Add("HAF55C5")
L.Items.Add("XT3")
L.Items.Add("ZX2")
L.Items.Add("AB1")
L.Items.Add("Fotografia000112.jpg")
L.Items.Add("Fotografia000278.jpeg")
L.Items.Add("(+351)934511497")
L.Items.Add("937359841")
L.Items.Add("PT50 0032 0000 5147 0148 9715 6")
L.Items.Add("0033 0000 21280037136 63")
L.Items.Add("13:33:37")
L.Items.Add("07/01/1986")
L.Items.Add("07/Jan/1986")
L.Items.Add("07 de Janeiro de 1986")
Dim Resultados As String = ""
For Each LI As String In L.Items
If (LI Like "(+###)#########") OrElse (LI Like "#########") = True Then
Resultados &= LI & " passa por número de telefone" & vbCrLf
End If
If LI Like "Fotografia######.*" = True Then
Resultados &= LI & " passa por formato de nome de fotografia" & vbCrLf
End If
If LI Like "??#" = True Then
Resultados &= LI & " passa por código de 3 caracteres com o último numérico" & vbCrLf
End If
If LI Like "H[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]" = True Then
Resultados &= LI & " passa por número hexadecimal" & vbCrLf
End If
If LI Like "#### #### ########### ##" = True Then
Resultados &= LI & " passa por NIB" & vbCrLf
End If
If LI Like "[A-Z][A-Z]## #### #### #### #### #### #" = True Then
Resultados &= LI & " passa por IBAN" & vbCrLf
End If
If LI Like "##/##/##" = True Then
Resultados &= LI & " passa por data" & vbCrLf
End If
If LI Like "##:##:##" = True Then
Resultados &= LI & " passa por hora" & vbCrLf
End If
If LI Like "## de * de ####" = True Then
Resultados &= LI & " passa por data por extenso" & vbCrLf
End If
If LI Like "[A-Z]*" = True Then
Resultados &= LI & " está capitalizado" & vbCrLf
End If
If LI Like "[XZF]*" = True Then
Resultados &= LI & " contém X, Z ou F no seu primeiro caractere" & vbCrLf
End If
If LI Like "[!XZF]*" = True Then
Resultados &= LI & " não contém X, Z ou F no seu primeiro caractere" & vbCrLf
End If
Next
MsgBox(Resultados)
End Sub
End Class