Ir para o conteúdo

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