VB
.NET - Usando Expressões regulares(Regex)
Eu já escrevi diversos artigos sobre o recurso Regex para saber mais leia os artigos:
Este artigo mostra como usar as expressões regulares para realizar validações.
Em todas as validações a estrutura básica é a mesma e segue o seguinte raciocínio:
1 - Primeiro definimos a expressão regular que será usada para realizar a validação
Dim padraoRegex As String = " expressão regular "
Aqui eu pesquisei na web e encontrei as expressões usadas para as diversas validações.
2 - A seguir criamos uma instância do objeto Regex usando a expressão regular definida
Dim verifica As New RegularExpressions.Regex(padraoRegex, RegexOptions.IgnorePatternWhitespace)
A classe Regex representa o mecanismo para tratar as expressões regulares na plataforma .NET . Ela pode ser usado para analisar rapidamente grandes quantidades de texto para encontrar padrões de caracteres específicos; para extrair, editar, substituir ou excluir substrings de texto, ou para adicionar as strings extraídas a uma coleção para gerar um relatório.
Para usar as expressões regulares, definimos o padrão desejado para identificar em um fluxo de texto usando a sintaxe documentada nos Elementos de linguagem das expressões regulares. A seguir instanciamos um objeto Regex. Finalmente, executamos alguma operação, como a substituição de texto que corresponda ao padrão de expressão regular, ou a identificação de um padrão coincidente.
A enumeração RegexOptions Fornece valores enumerados para usar para definir opções de expressões regulares. Os valores possíveis são:
| Valor | Descrição | 
| None | Especifica que nenhuma opção foi definida | 
| IgnoreCase | Especifica a comparação case-sensitive | 
| ExplicitCapture | Especifica que as únicas
        capturas válidas são explicitamente nomeadas ou grupos
        numerados do formulário (? <name> ...).  Isso permite que os parênteses sem nome atuem como grupos de não captura, sem a deselegância sintática da expressão (:? ...).  | 
    
| Singleline | Especifica modo linha-única. Muda o significado do ponto (.) Para que coincida com todos os caracteres (em vez de cada caractere, exceto \ n). | 
| IgnorePatternWhitespace | Elimina espaços em branco sem escape do padrão e permite comentários marcados com #. No entanto, o valor IgnorePatternWhitespace não afeta ou elimina o espaço em branco nas classes de caracteres. | 
| ECMAScript | Permite o comportamento compatível com ECMAScript para a expressão. Este valor pode ser usado apenas em conjunto com os valores IgnoreCase, Multiline, e Compiled. A utilização deste valor com quaisquer outros valores gera uma excepção. | 
| CultureInvariant | Especifica que as diferenças culturais na linguagem será ignorada. | 
| Compiled | Especifica que a expressão regular é compilada para um assembly. Isto obtém um rendimento melhor na execução, mas aumenta o tempo de inicialização. Este valor não deve ser atribuído à propriedade Opções ao chamar o método CompileToAssembly. | 
| Multiline | Modo multilinha. Altera o significado de ^ e $ para que eles correspondam ao início e final, respectivamente, de qualquer linha, e não apenas o início e o fim de toda a cadeia. | 
| RightToLeft | Especifica que a pesquisa será da direita para a esquerda em vez de da esquerda para a direita. | 
Na aplicação exemplos iremos realizar as seguintes validações :
| Validação | Expressão Regular | 
| ^[-a-zA-Z0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\.(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$ | |
| IP | ^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$ | 
| Cep | ^\d{5}-\d{3}$ | 
| Telefone | ^[0-9]{2}-[0-9]{4}-[0-9]{4}$ | 
| Data (dd/mm/yyyy) | ^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$ ou ^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$ | 
| URL | ^((http)|(https)|(ftp)):\/\/([\- \w]+\.)+\w{2,3}(\/ [%\-\w]+(\.\w{2,})?)*$ | 
| CPF | ^(\d{3}.\d{3}.\d{3}-\d{2})|(\d{11})$ ou ^\d{3}\x2E\d{3}\x2E\d{3}\x2D\d{2}$ | 
| CNPJ | ^\d{3}.?\d{3}.?\d{3}/?\d{3}-?\d{2}$ ou ^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$ | 
| Somente números | ^[0-9]*$ | 
^ : Indica o começo da linha. Caso seja omitido esse caractere, será permitida a entrada de qualquer tipo de caractere no início da expressão. Exemplo: w\?;.,io12306, nesse caso seria uma expressão válida.
	\d+ : Permite somente
        números. A barra invertida escapa o caractere d. Caso
        seja omitida, significa que estará permitindo
        sucessivamente várias ocorrências da letra d
        e não números. 
        Exemplo: dddd.+: Permite várias ocorrências de um
        caractere ou pelo menos uma ocorrência.
$ : indica o final da linha. Caso seja omitido esse caractere, será permitida a entrada de qualquer tipo de caractere no final da expressão. Exemplo:12345we.,?/;t, nesse caso seria uma expressão válida.
[0-9] : Tem o mesmo efeito que \d, ou seja, permite apenas números. O sinal  indica a condição de sequência, onde é informado o primeiro e o último caractere da sequência e o sistema se encarrega de mapear o intervalo.
[12]\d: Permite a ocorrência de do caractere 1 ou 2 [12] seguido de um número que pode variar de 0-9.
1[0-2]): Permite a ocorrência do caractere 1 seguido dos caracteres 0, 1, 2. Uma ocorrência por vez.
?: Indica que tudo que estiver depois na expressão é opcional.
.|,: O pipe na expressão tem o significado do ou lógico, ou seja, tanto o que tiver a direita ou a esquerda da expressão pode ocorrer, sendo uma ocorrência por vez
\w: Permite a entrada de qualquer caratere alfanumérico incluindo underscore.
\-: Permite a entrada do caractere -.
\.: Permite a entrada do caractere ..
*: Permite zero ou várias ocorrências de tudo que está a esquerda desse caractere na expressão.
@: Obriga a ocorrência desse caractere na expressão.
+: Permite várias ocorrências de um caractere ou pelo menos uma ocorrência.
Você pode procurar por expressões regulares no link: http://regexlib.com/Search.aspx
Criando o projeto VB .NET
Abra o Visual Basic 2010 Express Edition e no menu File clique em New Project informando o nome ValidarComRegex e no formulário padrão inclua uma Label, uma caixa de Texto, um Button e 9 controles radiobuttons conforme o leiaute da figura abaixo:
![]()  | 
    
A seguir no menu Project clique em Add Class e informe o nome Validar.vb incluindo o código abaixo nesta classe:
Imports System.Text
Imports System.Text.RegularExpressions
Public Class Validar
    ''' <param name="email">email para validar</param>
    ''' <returns>true é valido , false é inválido</returns>
    Public Shared Function IsValidEmail(ByVal email As String) As Boolean
        Dim padraoRegex As String = "^[-a-zA-Z0-9][-.a-zA-Z0-9]*@[-.a-zA-Z0-9]+(\.[-.a-zA-Z0-9]+)*\." & _
        "(com|edu|info|gov|int|mil|net|org|biz|name|museum|coop|aero|pro|tv|[a-zA-Z]{2})$"
        Dim verifica As New RegularExpressions.Regex(padraoRegex, RegexOptions.IgnorePatternWhitespace)
       Dim valida As Boolean = False
        'verifica se foi informado um email
        If String.IsNullOrEmpty(email) Then
            valida = False
        Else
            'usar IsMatch para validar o email
            valida = verifica.IsMatch(email)
        End If
        'retorna o valor
        Return valida
    End Function
    Public Shared Function IsValidIP(ByVal ip As String) As Boolean
        'cria o padrão regex
        Dim padraoRegex As String = "^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\." & _
        "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$"
        'cria o objeto Regex
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        'variavel boolean para tratar o status
        Dim valida As Boolean = False
        'verifica se o recurso foi fornecido
        If ip = "" Then
            'ip invalido
            valida = False
        Else
            'usa o método IsMatch Method para validar o regex
            valida = verifica.IsMatch(ip, 0)
        End If
        Return valida
    End Function
    Public Shared Function isValidCep(ByVal cep As String) As Boolean
        'cria o padrão regex
        Dim padraoRegex As String = "^\d{5}-\d{3}$"
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        'variavel boolean para tratar o status
        Dim valida As Boolean = False
        'verifica se o recurso foi fornecido
        If cep = "" Then
            'cep invalido
            valida = False
        Else
            'usa o método IsMatch Method para validar o regex
            valida = verifica.IsMatch(cep, 0)
        End If
        Return valida
    End Function
    Public Shared Function isValidSoNumeros(ByVal sonumeros As String) As Boolean
        'cria o padrão regex
        Dim padraoRegex As String = "^[0-9]*$"
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        'variavel boolean para tratar o status
        Dim valida As Boolean = False
        'verifica se o recurso foi fornecido
        If sonumeros = "" Then
            'cep invalido
            valida = False
        Else
            'usa o método IsMatch Method para validar o regex
            valida = verifica.IsMatch(sonumeros, 0)
        End If
        Return valida
    End Function
    Public Shared Function isValidTelefone(ByVal telefone As String) As Boolean
        'cria o padrão regex
        '^\d{2}-\d{4}-\d{4}$ 
        Dim padraoRegex As String = "^[0-9]{2}-[0-9]{4}-[0-9]{4}$"
        'cria o objeto Regex
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        'variavel boolean para tratar o status
        Dim valida As Boolean = False
        'verifica se o recurso foi fornecido
        If telefone = "" Then
            'telefone invalido
            valida = False
        Else
            'usa o método IsMatch Method para validar o regex
            valida = verifica.IsMatch(telefone, 0)
        End If
        Return valida
    End Function
    Public Shared Function isValidDataDDMMYYYY(ByVal ddmmyyyy As String) As Boolean
        'cria o padrão regex
        Dim padraoRegex As String = "^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$"
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        'variavel boolean para tratar o status
        Dim valida As Boolean = False
        'verifica se o recurso foi fornecido
        If ddmmyyyy = "" Then
            'telefone invalido
            valida = False
        Else
            'usa o método IsMatch Method para validar o regex
            valida = verifica.IsMatch(ddmmyyyy, 0)
        End If
        'return the results
        Return valida
    End Function
    Public Shared Function isValidUrl(ByVal url As String) As Boolean
        'cria o padrão regex
        Dim padraoRegex As String = "^((http)|(https)|(ftp)):\/\/([\- \w]+\.)+\w{2,3}(\/ [%\-\w]+(\.\w{2,})?)*$"
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        Dim valida As Boolean = False
        If url = "" Then
            'telefone invalido
            valida = False
        Else
            valida = verifica.IsMatch(url, 0)
        End If
        Return valida
    End Function
    Public Shared Function isValidCNPJ(ByVal cnpj As String) As Boolean
        Dim padraoRegex As String = "^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$"
        Dim verifica As New RegularExpressions.Regex(padraoRegex)
        Dim valida As Boolean = False
        If cnpj = "" Then
            valida = False
        Else
            valida = verifica.IsMatch(cnpj, 0)
        End If
        Return valida
    End Function
    Public Shared Function ValidarCpf(ByVal cpf As String) As Boolean
        cpf = cpf.Replace("-", "")
        cpf = cpf.Replace(".", "")
        Dim reg As New Regex("(^(\d{3}.\d{3}.\d{3}-\d{2})|(\d{11})$)")
        If Not reg.IsMatch(cpf) Then
            Return False
        End If
        Dim d1 As Integer, d2 As Integer
        Dim soma As Integer = 0
        Dim digitado As String = ""
        Dim calculado As String = ""
        ' Pesos para calcular o primeiro digito
        Dim peso1 As Integer() = New Integer() {10, 9, 8, 7, 6, 5, 4, 3, 2}
        ' Pesos para calcular o segundo digito
        Dim peso2 As Integer() = New Integer() {11, 10, 9, 8, 7, 6, 5, 4, 3, 2}
        Dim n As Integer() = New Integer(10) {}
        Dim retorno As Boolean = False
        ' Limpa a string
        cpf = cpf.Replace(".", "").Replace("-", "").Replace("/", "").Replace("\", "")
        ' Se o tamanho for < 11 entao retorna como inválido
        If cpf.Length <> 11 Then
            Return False
        End If
        ' Caso coloque todos os numeros iguais
        Select Case cpf
            Case "11111111111"
                Return False
            Case "00000000000"
                Return False
            Case "2222222222"
                Return False
            Case "33333333333"
                Return False
            Case "44444444444"
                Return False
            Case "55555555555"
                Return False
            Case "66666666666"
                Return False
            Case "77777777777"
                Return False
            Case "88888888888"
                Return False
            Case "99999999999"
                Return False
        End Select
        Try
            ' Quebra cada digito do CPF
            n(0) = Convert.ToInt32(cpf.Substring(0, 1))
            n(1) = Convert.ToInt32(cpf.Substring(1, 1))
            n(2) = Convert.ToInt32(cpf.Substring(2, 1))
            n(3) = Convert.ToInt32(cpf.Substring(3, 1))
            n(4) = Convert.ToInt32(cpf.Substring(4, 1))
            n(5) = Convert.ToInt32(cpf.Substring(5, 1))
            n(6) = Convert.ToInt32(cpf.Substring(6, 1))
            n(7) = Convert.ToInt32(cpf.Substring(7, 1))
            n(8) = Convert.ToInt32(cpf.Substring(8, 1))
            n(9) = Convert.ToInt32(cpf.Substring(9, 1))
            n(10) = Convert.ToInt32(cpf.Substring(10, 1))
        Catch
            Return False
        End Try
        ' Calcula cada digito com seu respectivo peso
        For i As Integer = 0 To peso1.GetUpperBound(0)
            soma += (peso1(i) * Convert.ToInt32(n(i)))
        Next
        ' Pega o resto da divisao
        Dim resto As Integer = soma Mod 11
        If resto = 1 OrElse resto = 0 Then
            d1 = 0
        Else
            d1 = 11 - resto
        End If
        soma = 0
        ' Calcula cada digito com seu respectivo peso
        For i As Integer = 0 To peso2.GetUpperBound(0)
            soma += (peso2(i) * Convert.ToInt32(n(i)))
        Next
        ' Pega o resto da divisao
        resto = soma Mod 11
        If resto = 1 OrElse resto = 0 Then
            d2 = 0
        Else
            d2 = 11 - resto
        End If
        calculado = d1.ToString() + d2.ToString()
        digitado = n(9).ToString() + n(10).ToString()
        ' Se os ultimos dois digitos calculados bater com
        ' os dois ultimos digitos do cpf entao é válido
        If calculado = digitado Then
            retorno = True
        Else
            retorno = False
        End If
        Return retorno
    End Function
End Class
         | 
    
A seguir no evento Click do botão de comando Validar inclua o código abaixo:
Public Class Form1
    Private Sub btnValidar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnValidar.Click
        If rdbCEP.Checked Then
            If Validar.isValidCep(txtDados.Text) Then
                MessageBox.Show("CEP valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("CEP inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbCNPJ.Checked Then
            If Validar.isValidCNPJ(txtDados.Text) Then
                MessageBox.Show("CNPJ valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("CNPJ inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbCPF.Checked Then
            If Validar.ValidarCpf(txtDados.Text) Then
                MessageBox.Show("CPF valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("CPF inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbData.Checked Then
            If Validar.isValidDataDDMMYYYY(txtDados.Text) Then
                MessageBox.Show("Data valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Data inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbEmail.Checked Then
            If Validar.IsValidEmail(txtDados.Text) Then
                MessageBox.Show("Email valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Email inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbFone.Checked Then
            If Validar.isValidTelefone(txtDados.Text) Then
                MessageBox.Show("Telefone valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("Telefone inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbIP.Checked Then
            If Validar.IsValidIP(txtDados.Text) Then
                MessageBox.Show("IP valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("IP inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbURL.Checked Then
            If Validar.isValidUrl(txtDados.Text) Then
                MessageBox.Show("URL valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("URL inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        ElseIf rdbSoNumeros.Checked Then
            If Validar.isValidSoNumeros(txtDados.Text) Then
                MessageBox.Show("dados valido...", "VÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                MessageBox.Show("dados inválido...", "INVÁLIDO", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End If
    End Sub
End Class
         | 
    
O código usado é funcional mas esta longe das melhores práticas. É um código básico, de fácil entendimento e estruturado para iniciantes.
Eu não precisaria repetir o código para validar cada recurso usando métodos distintos poderia criar um método único usando os recursos da orientação a objetos da linguagem VB .NET.
Deixo isso como um exercício para você.
Pegue o projeto completo
aqui: 
 ValidarComRegex.zip
Rom 3:10
como está escrito: Não há justo, nem sequer um.Rom 3:11
Não há quem entenda; não há quem busque a Deus.Rom 3:12
Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regexoptions.aspx