Expresiones Regulares en Python con Tkinter
Expresiones regulares en Tkinter |
En este post
continuando con la serie de expresiones regulares se explicará como
validar un:
-
Correo
electrónico -
Identificador
de PHP -
Identificador
de Java -
Fecha
-
Número real
-
Dirección
-
Número
telefónico -
Nombre
Para comenzar,
como primer paso debemos saber cómo está estructurado cada uno de
los elementos que deseamos validar, tomaremos como primer ejemplo
detallado el de correo electrónico.
como primer paso debemos saber cómo está estructurado cada uno de
los elementos que deseamos validar, tomaremos como primer ejemplo
detallado el de correo electrónico.
Tener en cuenta
que la expresión a crear va a depender de que tanto queramos
restringir al usuario, he aquí la diversión de las expresiones
regulares.
que la expresión a crear va a depender de que tanto queramos
restringir al usuario, he aquí la diversión de las expresiones
regulares.
Paso 1. ¿Cómo
está conformado un correo electrónico?
está conformado un correo electrónico?
Respuesta =
lleva un alias seguido de un @, después el domino al que pertenece,
eso de manera simple.
lleva un alias seguido de un @, después el domino al que pertenece,
eso de manera simple.
Correo electrónico |
Y como mencionaba
antes aquí está la diversión de encontrar una expresión regular
que nos valide esas cadenas.
antes aquí está la diversión de encontrar una expresión regular
que nos valide esas cadenas.
Paso 2:
como ya sabemos cómo está estructurado un correo el siguiente paso
es crear una expresión regular.
como ya sabemos cómo está estructurado un correo el siguiente paso
es crear una expresión regular.
La que yo les
propongo en el ejercicio es esta:
propongo en el ejercicio es esta:
[A-Za-z]+((.+|_+)([a-z]+|(d+)))?@[A-Za-z]+.com$
Claro ustedes
mismo pueden crear otra expresión regular más simple o más
complicada.
mismo pueden crear otra expresión regular más simple o más
complicada.
Y así hacer lo
mismo para las 8 restantes:
mismo para las 8 restantes:
Identificador de PHP | $_?[A-Za-z]+($?[A-Za-z]+|_[A-Za-z]+)(d+)?$ |
Identificador de Java | ($|_)?[A-Za-z]+($?[A-Za-z]+|_[A-Za-z]+)(d+)?$ |
Fecha | (0[1-9]|[1-2][0-9]|3[0-1])/(0[1-9]|1[0-12])/(19|20)dd$ |
Número Real | (-|+)?([0-9]{1,4})+.?[0-9]{1,4} |
Número Entero | (-|+)?([0-9]{1,4})+$ |
Dirección | ((d+s)?[A-Za-z]+(s))+([sS]/[Nn]|#d+)? |
Numero Telefónico | d{3}-?d{3}-?d{2}-?d{2} |
Nombre | (([A-Za-z]+(s))?[A-Za-z]+)((s)[A-Za-z]+(s)[A-Za-z]+$) |
Y ahora manos a
la obra a programar en Python.
la obra a programar en Python.
No voy a
adentrarme en que paqueterías debes descargar para utilizar Tkinter
porque ya hay post relacionados con ese tema: Aplicaciones gráficas con Tkinter
adentrarme en que paqueterías debes descargar para utilizar Tkinter
porque ya hay post relacionados con ese tema: Aplicaciones gráficas con Tkinter
Como primer paso
vamos a crear la interfaz gráfica, pondremos un label y un campo de
texto, yo la suelo crear así:
vamos a crear la interfaz gráfica, pondremos un label y un campo de
texto, yo la suelo crear así:
import re #importamos la librería de expresiones regulares from tkinter import * #importamos la librería de tkinter ventana = Tk() #creamos un objeto ventana ventana.geometry("500x270+100+100") #le asignamos el tamaño ventana.title("Expresiones Regulares") #le asignamos un titulo #Creando etiqueta lblUsuario=Label(text="Ingrese la cadena: ",font=("Agency FB",16)).place(x=20,y=10) #Creando un campo de texto entrada = StringVar() #Creando caja de texto textUsuario = Entry(ventana,textvariable=entrada,width=42).place(x=150,y=20) ventana.mainloop()#mandamos a motrar todo lo que contiene ventana
Al correrlo como
resultado obtenemos esto:
Label y Campo de texto |
Ahora ya tenemos
un campo de texto en el cual escribiremos una cadena y solo nos falta
un botón, que al darle clic nos mostrara un mensaje de valido o
invalido, crearemos un botón para validar un correo electrónico.
un campo de texto en el cual escribiremos una cadena y solo nos falta
un botón, que al darle clic nos mostrara un mensaje de valido o
invalido, crearemos un botón para validar un correo electrónico.
En sintaxis de
Tkinter para crear un botón podemos apreciar que command
nos pide una función que va a ser la encargada de dirigir y ejecutar
una acción.
Tkinter para crear un botón podemos apreciar que command
nos pide una función que va a ser la encargada de dirigir y ejecutar
una acción.
Para ello hay que
crear una función que valide lo que tenemos en el campo de texto y
nos muestre si es válido o no, con los conocimientos previos del
post anterior: Expresiones regulares en python,
lo crearemos así:
crear una función que valide lo que tenemos en el campo de texto y
nos muestre si es válido o no, con los conocimientos previos del
post anterior: Expresiones regulares en python,
lo crearemos así:
def Correo(): cadena=entrada.get() patron="[A-Za-z]+((.+|_+)([a-z]+|(d+)))?@[A-Za-z]+.com$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50)
Ahora que ya tenemos una función podemos avanzar y crear el botón para validar un correo.
import re # importamos la librería re from tkinter import * #importamos la librería de tkinter # la función de correo a la cual el botón se va a dirigir def Correo(): cadena=entrada.get()#obtenemos la cadena del campo de texto patron="[A-Za-z]+((.+|_+)([a-z]+|(d+)))?@[A-Za-z]+.com$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) ventana = Tk() #creamos un objeto ventana ventana.geometry("500x270+100+100") #le asignamos el tamanio ventana.title("Expresiones Regulares") #le asignamos un titulo #Creando etiqueta lblUsuario=Label(text="Ingrese la cadena: ",font=("Agency FB",16)).place(x=20,y=10) #Creando un campo de texto entrada = StringVar() #Creando caja de texto textUsuario = Entry(ventana,textvariable=entrada,width=42).place(x=150,y=20) #creando el boton btnCorreo=Button(ventana,text="Correo Electronico",command=Correo,font=("Agency FB",14), width=20).place(x=10,y=90) ventana.mainloop()#mandamos a mostrar todo lo que contiene ventana
Validar Correo |
Teniendo ya la idea
en concreto lo que sigue es básicamente lo mismo para los demás,
crear su botón junto con su propia función quedando de la siguiente
forma:
import re from tkinter import * #definiendo la funciones def Correo(): cadena=entrada.get() patron="[A-Za-z]+((.+|_+)([a-z]+|(d+)))?@[A-Za-z]+.com$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def IdentPHP(): cadena=entrada.get() patron="$_?[A-Za-z]+($?[A-Za-z]+|_[A-Za-z]+)(d+)?$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def IdentJAVA(): cadena=entrada.get() patron="($|_)?[A-Za-z]+($?[A-Za-z]+|_[A-Za-z]+)(d+)?$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def Fecha(): cadena=entrada.get() patron="(0[1-9]|[1-2][0-9]|3[0-1])/(0[1-9]|1[0-12])/(19|20)dd$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def NumReal(): cadena=entrada.get() patron="(-|+)?([0-9]{1,4})+.?[0-9]{1,4}" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def Entero(): cadena=entrada.get() patron="(-|+)?([0-9]{1,4})+$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def Direccion(): cadena=entrada.get() patron="((d+s)?[A-Za-z]+(s))+([sS]/[Nn]|#d+)?$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def Telefono(): cadena=entrada.get() patron="d{3}-?d{3}-?d{2}-?d{2}$" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def Nombre(): cadena=entrada.get() patron="(([A-Za-z]+(s))?[A-Za-z]+)((s)[A-Za-z]+(s)[A-Za-z]+$)" if(re.match(patron,cadena)): lblResultado=Label(ventana,text="Cadena valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) else: lblResultado=Label(ventana,text="Cadena No valida: "+ entrada.get(), font=("Agency FB",19)).place(x=40,y=50) def Limpiar(): lblResultado=Label(ventana,text=" ", font=("Agency FB",19)).place(x=40,y=50) #Inicia la aplicación ventana = Tk() ventana.geometry("500x270+100+100") ventana.title("Expresiones Regulares") #Creando etiqueta lblUsuario=Label(text="Ingrese la cadena: ",font=("Agency FB",16)).place(x=20,y=10) #Creando un campo de texto entrada = StringVar() #entrada.set("ejemplo") #Creando caja de texto textUsuario = Entry(ventana,textvariable=entrada,width=42).place(x=150,y=20) #Crear botones btnCorreo=Button(ventana,text="Correo Electronico",command=Correo,font=("Agency FB",14), width=20).place(x=10,y=90) btnIdentPHP=Button(ventana,text="Identificador de PHP",command=IdentPHP,font=("Agency FB",14), width=20).place(x=10,y=140) btnIdentJAVA=Button(ventana,text="Identificador de JAVA",command=IdentJAVA,font=("Agency FB",14), width=20).place(x=10,y=190) btnFecha=Button(ventana,text="Formato de Fecha",command=Fecha,font=("Agency FB",14), width=20).place(x=180,y=90) btnNumReal=Button(ventana,text="Numero Real",command=NumReal,font=("Agency FB",14), width=20).place(x=180,y=140) btnEntero=Button(ventana,text="Numero Entero",command=Entero,font=("Agency FB",14), width=20).place(x=180,y=190) btnDireccion=Button(ventana,text="Direccion Personal",command=Direccion,font=("Agency FB",14), width=20).place(x=340,y=90) btnTelefono=Button(ventana,text="Telefono",command=Telefono,font=("Agency FB",14), width=20).place(x=340,y=140) btnNombre=Button(ventana,text="Nombre Completo",command=Nombre,font=("Agency FB",14), width=20).place(x=340,y=190) btnLimpiar=Button(ventana,text="Limpiar",command=Limpiar,font=("Agency FB",14),width=8).place(x=420,y=15) #Mostrar ventana ventana.mainloop()
Listo para usarse y
validar cadenas
Aplicación para validar cadenas |
Heder Ithamar Romero |
Autor: Heder Ithamar Romero
Seguir: Google +
-
-
Hola Christian, gracias por visitar el blog. La entrada fue escrita por Heder Ithamar Romero. Saludos
-
-
Excelente ejemplo... sigamos aportando... en cuanto aprenda mas, aportare mi enfoque es usar python para ARCGIS.... saludos!
-
Gracias Fidel por visitar el blog. Saludos
-
Deja una respuesta
gracias por compartir tu conocimiento! 😉