Expresiones Regulares en Python con Tkinter

Expresiones regulares en Tkinter
Expresiones regulares en Tkinter

En este post
continuando con la serie de expresiones regulares se explicará como
validar un:

  1. Correo
    electrónico
  2. Identificador
    de PHP
  3. Identificador
    de Java
  4. Fecha
  5. Número real

  6. Numero entero
  7. Dirección
  8. Número
    telefónico
  9. 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.
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
.
Paso 1. ¿Cómo
está conformado un correo electrónico?
Respuesta =
lleva un alias seguido de un @, después el domino al que pertenece,
eso de manera simple.
Correo electrónico
Correo electrónico
Y como mencionaba
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.
La que yo les
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.
Y así hacer lo
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.
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
Como primer paso
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
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.
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.
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í:
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
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
Aplicación para validar cadenas

Heder Ithamar Romero
Heder Ithamar Romero

Autor: Heder Ithamar Romero

Seguir: Google +
  1. Unknown dice:

    gracias por compartir tu conocimiento! 😉

    1. PythonDiario dice:

      Hola Christian, gracias por visitar el blog. La entrada fue escrita por Heder Ithamar Romero. Saludos

  2. Fidel López Salazar dice:

    Excelente ejemplo... sigamos aportando... en cuanto aprenda mas, aportare mi enfoque es usar python para ARCGIS.... saludos!

    1. PythonDiario dice:

      Gracias Fidel por visitar el blog. Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Te has suscrito correctamente al boletín

Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.