none
Validación textbox de 3 números y 3 letras o 1 letra y 7 números RRS feed

  • Pregunta

  • Hola gente del foro, estoy tratando de hacer una validación en un Textbox pero no logro la forma de conseguirlo. El lenguaje que estoy utilizando es vb.net.

    El Textbox debe permitir el ingreso de 3 letras y tres números, o 1 letra y 7 números.

    Espero que me puedan ayudar amigos o bien orientar de qué manera podría llegar a realizar ese tipo de validación, y desde ya muchas gracias por la ayuda que me puedan llegar a brindar.

    Saludos!

    viernes, 13 de noviembre de 2015 20:11

Respuestas

  • Podrías ir comprobando en el evento KeyPress que los caracteres pulsados sean válidos y realizar una validación con una expresión regular en el evento Validating:

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim control As TextBox = sender
            If Char.IsLetterOrDigit(e.KeyChar) Then
                Dim texto As String = control.Text.Substring(0, control.SelectionStart)
                texto = texto & e.KeyChar
                texto = texto & control.Text.Substring(control.SelectionStart + control.SelectionLength)
                e.Handled = Not IsValid(texto)
            ElseIf Not Char.IsControl(e.KeyChar) Then
                e.Handled = True
            End If
        End Sub
    
        Private Function IsValid(texto As String) As Boolean
            If Not Char.IsLetter(texto(0)) Then Return False
            Dim letterCount = 1
            While letterCount < texto.Length AndAlso Char.IsLetter(texto(letterCount))
                letterCount += 1
            End While
            If letterCount > 3 Then Return False
            For index = letterCount To texto.Length - 1
                If Not Char.IsDigit(texto(index)) Then Return False
            Next
            Dim numberCount = texto.Length - letterCount
            If numberCount > 7 Then Return False
            If letterCount > 1 AndAlso numberCount > 3 Then Return False
            Return True
        End Function
    
        Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
            If String.IsNullOrEmpty(TextBox1.Text) Then Return
    
            Dim pattern As String = "^(([A-Za-z]\d{7})|([A-Za-z]{3}\d{3}))$"
            If Not Regex.IsMatch(TextBox1.Text, pattern) Then
                MessageBox.Show("No válido")
                e.Cancel = True
            End If
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    • Editado Asier Villanueva sábado, 14 de noviembre de 2015 15:36 Corregir expresión regular
    • Marcado como respuesta Alejandsro lunes, 16 de noviembre de 2015 15:08
    sábado, 14 de noviembre de 2015 10:25

Todas las respuestas

  • Podrías ir comprobando en el evento KeyPress que los caracteres pulsados sean válidos y realizar una validación con una expresión regular en el evento Validating:

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim control As TextBox = sender
            If Char.IsLetterOrDigit(e.KeyChar) Then
                Dim texto As String = control.Text.Substring(0, control.SelectionStart)
                texto = texto & e.KeyChar
                texto = texto & control.Text.Substring(control.SelectionStart + control.SelectionLength)
                e.Handled = Not IsValid(texto)
            ElseIf Not Char.IsControl(e.KeyChar) Then
                e.Handled = True
            End If
        End Sub
    
        Private Function IsValid(texto As String) As Boolean
            If Not Char.IsLetter(texto(0)) Then Return False
            Dim letterCount = 1
            While letterCount < texto.Length AndAlso Char.IsLetter(texto(letterCount))
                letterCount += 1
            End While
            If letterCount > 3 Then Return False
            For index = letterCount To texto.Length - 1
                If Not Char.IsDigit(texto(index)) Then Return False
            Next
            Dim numberCount = texto.Length - letterCount
            If numberCount > 7 Then Return False
            If letterCount > 1 AndAlso numberCount > 3 Then Return False
            Return True
        End Function
    
        Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
            If String.IsNullOrEmpty(TextBox1.Text) Then Return
    
            Dim pattern As String = "^(([A-Za-z]\d{7})|([A-Za-z]{3}\d{3}))$"
            If Not Regex.IsMatch(TextBox1.Text, pattern) Then
                MessageBox.Show("No válido")
                e.Cancel = True
            End If
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    • Editado Asier Villanueva sábado, 14 de noviembre de 2015 15:36 Corregir expresión regular
    • Marcado como respuesta Alejandsro lunes, 16 de noviembre de 2015 15:08
    sábado, 14 de noviembre de 2015 10:25
  • Solo una pequeña observación: En la expresión regular, donde se indica el rango de caracteres, sobra la barra vertical. Es decir, debe ser [A-Za-z] en lugar de [A-Z|a-z]. De lo contrario, la barra vertical se admitiría como carácter válido en lugar de una letra.
    sábado, 14 de noviembre de 2015 13:59
  • Cierto.

    Corregido.

    Gracias Alberto.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 14 de noviembre de 2015 15:36
  • Asier Villanueva el código que me pasaste funciona perfectamente. La verdad que te agradezco mucho por la ayuda. Lo último que me gustaría preguntarte es que tendría que modificar si por ejemplo en otro Textbox permitiera el ingreso en forma viceversa es decir que permita el ingreso solo de 3 números y 3 letras. Y desde ya muchas gracias por tu pronta respuesta y por tu ayuda.


    lunes, 16 de noviembre de 2015 15:10
  • Deberías modificar la función IsValid y la expresión regular:

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim control As TextBox = sender
            If Char.IsLetterOrDigit(e.KeyChar) Then
                Dim texto As String = control.Text.Substring(0, control.SelectionStart)
                texto = texto & e.KeyChar
                texto = texto & control.Text.Substring(control.SelectionStart + control.SelectionLength)
                e.Handled = Not IsValid(texto)
            ElseIf Not Char.IsControl(e.KeyChar) Then
                e.Handled = True
            End If
        End Sub
    
        Private Function IsValid(texto As String) As Boolean
            If Not Char.IsDigit(texto(0)) Then Return False
            Dim numberCount = 1
            While numberCount < texto.Length AndAlso Char.IsDigit(texto(numberCount))
                numberCount += 1
            End While
            If numberCount > 3 Then Return False
            For index = numberCount To texto.Length - 1
                If Not Char.IsLetter(texto(index)) Then Return False
            Next
            Dim letterCount = texto.Length - numberCount
            If letterCount > 3 Then Return False
            Return True
        End Function
    
        Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
            If String.IsNullOrEmpty(TextBox1.Text) Then Return
    
            Dim pattern As String = "^\d{3}[A-Za-z]{3}$"
            If Not Regex.IsMatch(TextBox1.Text, pattern) Then
                MessageBox.Show("No válido")
                e.Cancel = True
            End If
        End Sub
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    lunes, 16 de noviembre de 2015 20:46
  • No tengo más que palabras de agradecimiento por tu ayuda Asier Villanueva. Muchas gracias funciona muy bien el código.

    martes, 17 de noviembre de 2015 17:35
  • Hola,

    Favor me puedes ayudar en esto:

    Necesito ingresar en un texbox el siguiente ejemplo de datos:

    92750590

    o también:

    93456789K

    o tambien:

    456753455

    La consulta es:

    ¿cual sería el código para que solo permita ingresar al texbox números en los 8 ó 9 primeros dígitos y en el último dígito permita ingresar números o solo la letra K.

    Cualquier ayuda desde ya muchas gracias

    viernes, 14 de febrero de 2020 17:13
  • ¿cual sería el código para que solo permita ingresar al texbox números en los 8 ó 9 primeros dígitos y en el último dígito permita ingresar números o solo la letra K.

    Si usas el método de la expresión regular que se comenta más arriba, entonces la expresión regular que tienes que usar es esta:

    "^\d{8}[0-9K]?$"

    viernes, 14 de febrero de 2020 20:20
  • Gracias Alberto,

    Lo implementare

    sábado, 15 de febrero de 2020 1:29