22 mayo, 2007

Validando strings mediante patrones

En los sistemas de información la frase "Basura entra basura sale" es muy conocida, pero esta frase nunca nos debe servir para justificar las salidas incorrectas de un sistema, nos debe servir como experiencia que nos lleve a validar de mejor manera la información digitada por el usuario.

El Dot. Net Framework nos proporciona una serie de clases contenidas en el namespace system.text.regularexpressions que nos permiten validar la información del usuario mediante patrones conocidos como regular expression. Sinceramente debo indicar que la creación de estos patrones es bastante complicada y difícil de darle mantenimiento.

Para poder validar un string debemos primero crear un patrón, este patrón consta de una serie de caracteres que tienen un significado especial, veamos algunos de estos caracteres especiales y su significado.

Carácter

Uso

^

Inicio del string

$

Fin del string

\d{}

Solo dígitos numéricos, la cantidad la determina el número colocado entre {}

[ ]

Valida que el dígito sea igual a cualquiera de los caracteres contenidos entre las llaves

[ - ]

Valida que el dígito sea igual a cualquiera de los caracteres contenidos entre las llaves

*

Implica que repite el carácter precedente o puede no existir carácter

+

Implica que repite el carácter precedente estrictamente (debe de existir)

\s

Implica un espacio en blanco, puede ser espacio o tabulación

Veamos algunos ejemplos:

Para validar que se digite un teléfono válido, con el siguiente formato ###-#### podríamos usar el siguiente patrón:

Dato a Validar

Formato

Patrón

Número telefónico

###-####

^\d{3}-\d{4}$

Cédula (con guiones)

#-###-###

^[1-9]-\d{3}-\d{3}$

Correo Electrónico

nombre@dominio

^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)(([\w-]+\.)+))([a-zA-Z]{2,4}[0-9]{1,3})(\]?)$

Veamos un fragmento de código que nos aclare cómo utilizar regular expression

Imports System.Text.RegularExpressions

Module Module1

Sub Main()

Dim Mascara As String = ""

Dim PalabraaEvaluar As String = ""

While PalabraaEvaluar <> "Salir"

Console.Write("Máscara: ")

Mascara = Console.ReadLine()

Console.Write("Palabra: ")

PalabraaEvaluar = Console.ReadLine()

If Regex.IsMatch(PalabraaEvaluar, Mascara) Then

Console.WriteLine("Pasa la evaluación")

Else

Console.WriteLine("NO Pasa la evaluación")

End If

Console.ReadKey()

End While

End Sub

End Module

También podemos usar regular expressions para extraer fragmentos de un string, utilizando patrones similares a los anteriormente vistos

Imports System.Text.RegularExpressions

Module Module1

Sub Main()

Dim Completo As String = "Nombre: Alejandro Soto"

Dim Extracto As Match

Extracto = Regex.Match(Completo, "Nombre: (.*$)")

Console.WriteLine(Extracto.Groups(1))

Console.ReadKey()

End Sub

End Module

Hay libros completes sobre regular expression, el sentido de este post es solo hacer una breve reseña que sirva de introducción al tema.

2 comentarios:

Unknown dijo...

Excelente, me sirvió montones la expresión regular de cedulas. Saludos

Anónimo dijo...

excelente el de la cédula gracias