Grupo,

Buscando la forma mas efectiva de validar un email me encontré con esta
función que si bien esta hecha en VFP utiliza el objeto RegExp de VBScript.

LPARAMETERS email as String
LOCAL loRegExp,llValido
IF VARTYPE(email) # "C"
RETURN .F.
ENDIF
*
loRegExp = CreateObject("VBScript.RegExp")
loRegExp.IgnoreCase = .T.
loRegExp.Pattern =
 
'^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)-*)\.([A-Za-z]{2,})$'
llValido=loRegExp.Test(ALLTRIM(m.email))
RELEASE loRegExp
RETURN llValido

Como pueden observar se ingresa un patrón a verificar y el comando Test
valida que la cadena ingresada coincida con el patrón.

Hasta ahí fantástico porque la función es muy sencilla y muy fácil de
programar...

Investigando un poco mas a cerca de estos patrones trascribo un artículo
que solo me aparece al consultar el cache de la búsqueda.

Expresiones regulares imprescindibles para el desarrollo de aplicaciones web
El uso de expresiones regulares a la hora de desarrollar una aplicación, es
prácticamente necesario, ya que nos ayuda a realizar comprobaciones de
cadenas para que cumplan una serie de premisas. Verificar que una cadena
cumpla varias limitaciones es complicado, pero si hacemos uso de las
expresiones regulares, su verificación puede resultar más sencillo.

Vamos a ver un conjunto de expresiones regulares, que deberíais tener en
cuenta a la hora de desarrollar una aplicación.

*1.- Validar una URL*

Expresión útil si necesitas saber si una URL es válida.

/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w ?=.-]*)*/?$/



*2.- Validar un Email*

Muy útil a la hora de crear formularios para que los usuarios indiquen sus
direcciones de correo.

^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$



*3.- Comprobar la seguridad de una contraseña*

En este caso, la expresión servirá para verificar la fortaleza de la
contraseña, y que esta cumpla las siguientes premisas:

*Contraseñas que contengan al menos una letra mayúscula.
*Contraseñas que contengan al menos una letra minúscula.
*Contraseñas que contengan al menos un número o carácter especial.
*Contraseñas cuya longitud sea como mínimo 8 caracteres.
*Contraseñas cuya longitud máxima no debe ser arbitrariamente limitada.

(?=^.{8,}$)((?=.*d)|(?=.*W+))(?![.n])(?=.*[A-Z])(?=.*[a-z]).*$



*4.- Validar un número de teléfono*

Con esta expresión regular, se verificarán todos los números de teléfono.

^+?d{1,3}?[- .]?(?(?:d{2,3}))?[- .]?ddd[- .]?dddd$



*5.- Validar número de la tarjeta de crédito*

Expresión muy útil a la hora del desarrollo de alguna aplicación de compra,
ya que podrás verificar que el número de la tarjeta cumple el patrón
correcto.

^((67d{2})|(4d{3})|(5[1-5]d{2})|(6011))(-?s?d{4}){3}|(3[4,7])
d{2}-?s?d{6}-?s?d{5}$



*6.- Recoger el ID de un vídeo de Youtube*

Expresión útil para recoger el ID de un vídeo de Youtube en sus diferentes
formatos.

/http://(?:youtu.be/|(?:[a-z]{2,3}.)?youtube.com/watch(?:?|#!)v=)([w-]{11}).*/gi



*7.- Validar todas las etiquetas de imagen sin cerrar*

Con esta expresión conseguiremos verificar si todas las etiquetas de
imágenes están cerradas correctamente.

<img([^>]+)(s*[^/])></img([^>



*8.- Validar una dirección IP*

Expresión para verificar una dirección ip introducida por un usuario.

/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/



*9.- Validar código postal*

Otra expresión útil a la hora de verificar los datos de un formulario. Con
esto conseguiremos que el código postal que se introduzca cumpla las reglas
indicadas.

^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$



*10.- Validar un nombre de usuario*

Para esta expresión regular, hemos tenido en cuenta las siguientes reglas:

*Nombre de usuario empieza con minúsculas o mayúsculas.
*Solo puede contener letras, números o guiones.
*Su longitud es entre 8 y 24 caracteres.
*El usuario no puede terminar con guión bajo.

#^[a-z][da-z_]{6,22}[a-zd]$#i



*11.- Validar fechas*

Considerando que puede usarse los siguiente caracteres como separador de
dígitos: "/", "-" y "."; además del siguiente formato DD-MM-YYYY.

#^(((0?[1-9]|1d|2[0-8]){[/-.]}(0?[1-9]|1[012])|(29|30){[/-.]}(0?[13456789]|1[012])|31{[/-.]}(0?[13578]|1[02])){[/-.]}(19|[2-9]d)d{2}|29{[/-.]}0?2{[/-.]}((19|[2-9]d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$#







Nuevamente esto amplía muchísimo el panorama de la función previa. Tan solo
aplicando patrones hace que las validaciones sean realmente sencillas.

Pero aun no estaba conforme con lo investigado porque estaba usando un
objeto externo a VFP y me encontré con estos tres artículos espectaculares
de Craig Boyd en PortalFox:

Una biblioteca de expresiones regulares para Visual
FoxPro<http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=127&page=1>
Expresiones regulares en Visual FoxPro - Parte
2<http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=128&page=1>
Expresiones regulares en Visual FoxPro - Parte
3<http://www.portalfox.com/index.php?name=Sections&req=viewarticle&artid=129&page=1>

Ahora si puedo dormir feliz!

Saludos,
Pancho
Córdoba

Responder a