Google+ Seguidores

lunes, 20 de abril de 2015

Expresiones Regulares en Python con Tkinter

    4


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)\d\d$
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)\d\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 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 +

4 comentarios:
Write comentarios
  1. Respuestas
    1. Hola Christian, gracias por visitar el blog. La entrada fue escrita por Heder Ithamar Romero. Saludos

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

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

© 2014 Mi diario Python. Designed by Bloggertheme9 | Distributed By Gooyaabi Templates
Powered by Blogger.