COMO APRIMORAR A FUNCAO VALIDA_TELEFONES

 Tópico anterior Próximo tópico Novo tópico

COMO APRIMORAR A FUNCAO VALIDA_TELEFONES

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#492031 - 29/12/2019 17:28:58

PROGRAMADORVB6
LISBOA
Cadast. em:Janeiro/2004


Última edição em 29/12/2019 17:34:52 por PROGRAMADORVB6

Ol boa noite,
Fiz uma pequena funo para validar nmeros de celular (91x, 92x, 93x, 96x) e fixos (2x) est um pouco rudimentar, mas gostaria de a aprimorar melhor; fiz assim :

Imports System.Text.RegularExpressions
Public Class Form1
    []/* validar numeros moveis (91x, 92x, 93x, 96x) e fixos (2x) */
    []/^(9[1236]\d{7}|2\d{8})$/
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.TextBox1.Text = Trim(Me.TextBox1.Text)
        If Valida_Telefones(Me.TextBox1.Text) = False Then

            MessageBox.Show([]O campo no foi preenchido correctamente[], []Campo incorrecto[], MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        End If
        If Valida_Telefones(Me.TextBox1.Text) = True Then
            MessageBox.Show([]O campo foi preenchido correctamente![], []Campo correcto[], MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
    End Sub

    Public Shared Function Valida_Telefones(ByVal NumerosTelefone As String) As Boolean
        If NumerosTelefone.ToString = [][] Then Return False
        If Not String.IsNullOrEmpty(NumerosTelefone.ToString) Then
            Dim Verifica As Match = System.Text.RegularExpressions.Regex.Match(NumerosTelefone.ToString, []^(9[1236]\d{7}|2\d{8})$[]) []21 474 3179
            If Not Verifica.Success Then
                Return False
            End If
            If Verifica.Success Then
                Return True
            End If
        End If

        Valida_Telefones = NumerosTelefone
    End Function
End Class


Grato desde j pela vossa ateno.
ProgramadorVB6


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha fora seja to grande quanto minha f.


#492032 - 29/12/2019 18:05:51

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Torn-la um mtodo de extenso?
Criar um componente que herde de TextBox especfico para telefone?


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#492034 - 29/12/2019 19:56:57

PROGRAMADORVB6
LISBOA
Cadast. em:Janeiro/2004


Última edição em 29/12/2019 20:05:30 por PROGRAMADORVB6

O que eu pergunto se a funo est bem escrita! Falta-lhe alguma coisa a acrescentar ?


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha fora seja to grande quanto minha f.


#492035 - 29/12/2019 21:15:03

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Razovel, eu usaria um bloco try...catch dentro dela s pra garantir. Mas com certeza no seria assim a implementao. Usaria uma das opes que mencionei, assim, no precisa colocar o mesmo cdigo por toda a parte.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#492037 - 29/12/2019 22:26:23

OCELOT
SOROCABA
Cadast. em:Março/2012


Última edição em 29/12/2019 22:29:39 por OCELOT

Alm de poder colocar em outra classe para reutilizar mais fcil, usando ou no como mtodo de extenso, da pra melhorar um pouco seu cdigo, tentei explicar alguns pontos do seu cdigo nos comentrios e tambm o como eu faria esta funo
Public Shared Function Valida_Telefones(ByVal NumerosTelefone As String) As Boolean
    []aqui voc est verificando se uma string vazia, mas usa o mtodo ToString sendo que j uma string
    If NumerosTelefone.ToString = [][] Then Return False
    []e logo em segui verifica se um string vazia ou nula, se ela for nula j teria ocorrido um erro na linha anterior
    If Not String.IsNullOrEmpty(NumerosTelefone.ToString) Then
        []se for utilizar vrias vezes a funo poderia criar o Regex antes
        Dim Verifica As Match = System.Text.RegularExpressions.Regex.Match(NumerosTelefone.ToString, []^(9[1236]\d{7}|2\d{8})$[]) []21 474 3179
        []no necessrio fazer dois ifs, apenas um seria o suficiente, ou melhor ainda, s um return direto
        If Not Verifica.Success Then
            Return False
        End If
        If Verifica.Success Then
            Return True
        End If
    End If

    []voc provavelmente colocou esta linha pelo compilador reclamando de que mtodo no retornava um valor, porm isto est incorreto, voc est atribuindo uma string para um boolean
    Valida_Telefones = NumerosTelefone
End Function


Como eu faria
Public Module MinhasFuncoes

    []cria uma instancia da regex para poder ser reutilizada, usar o mtodo esttico (shared) cria um novo objeto cada vez que ele chamado
    Private RegexTelefone As New Regex([]^(9[1236]\d{7}|2\d{8})$[], RegexOptions.Compiled) []no realmente necessrio o a opo Compiled, mas sem testes de performance no tem como saber quando vale ou no a pena usar

    Public Function ValidaTelefones(ByVal NumerosTelefone As String) As Boolean
        []se veio nulo, uma string vazia ou s espaos ento o retorno sempre falso
        If (String.IsNullOrWhiteSpace(NumerosTelefone)) Then
            Return False
        End If
        []todo o resto pode ser simplificado para isso
        Return RegexTelefone.Match(NumerosTelefone).Success
    End Function

End Module


S uma observao que quero deixar que no testei a lgica em si faz o que ela deveria, apenas reescrevi o seu cdigo de outra forma, os dois devem ter praticamente o mesmo resultado, acho que a nica diferena que o seu daria erro se recebesse um valor nulo




#492038 - 30/12/2019 08:57:19

PROGRAMADORVB6
LISBOA
Cadast. em:Janeiro/2004


Última edição em 30/12/2019 09:16:06 por PROGRAMADORVB6

Ol pessoal desde j quero agradecer a todos vocs pela pacincia, em segundo a funo do colega  OCELOT , ficou xou de bola s lhe acrescentei este cdigo :
Me.TextBox1.Text = Regex.Replace(Me.TextBox1.Text, []\s[], [][])

e em terceiro queria desejar a todos vocs  :
- Felicidades para uma vida melhor e um futuro brilhante!
Tenham um prspero Ano Novo e um Feliz 2020!

So os votos deste vosso amigo
ProgramadorVb6

Pst! : se quiserem acrescentar algo ao cdigo, como uma funo ( generalizada ) s escrever desde j agradeo novamente a vossa colaborao e pacincia.


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha fora seja to grande quanto minha f.


 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário