Archivo de la Categoría “Programación”

Continuando con las expresiones regulares, para validar fechas se puede utilizar la siguiente función en ASP:

function esValidoFecha(cadena)
  set expReg = New RegExp
  expReg.Pattern = "^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])_
                    (\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)_
                    ([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])_
                    (\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|_
                    ((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)_
                    ([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9]_
                    [0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9]_
                    [13579][26])))$"
  esValidoFecha = expReg.Test(cadena)
  set expReg = nothing
end function

La expresión regular (que se puede poner en una única línea eliminando los _ finales) es un poco larga porque ha de tener en cuenta los días de los meses del año, los años bisiestos,… Para validar del lado del cliente (antes de enviar el formulario), se puede utilizar el mismo patrón en Javascript:

function esValidoFecha(cadena) {
  strExpReg = /^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])_
                (\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)_
                ([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])_
                (\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|_
                ((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)_
                ([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9]_
                [0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9]_
                [13579][26])))$/;
  return strExpReg.test(cadena);
}

En esta función en Javascript sí que es necesario juntar la expresión en una única línea quitando los _ porque de lo contrario no funcionará.

Etiquetas: , , ,

Comments 10 Comentarios »

A la hora de mantener y cambiar contenidos de una página web, las cachés de los navegadores pueden jugar malas pasadas a los desarrolladores y diseñadores web, haciendo que los cambios no se reflejen de manera inmediata, sobretodo con contenidos en flash. Las cachés de los navegadores y los proveedores de Internet (como el famoso Proxy-caché de Telefónica) guardan las urls completas para ver si la tienen en caché a la hora de solicitar una página. Así, cuando la caché está activada y un usuario solicita la página http://www.example.com/a.htm, el navegador mira si tiene esa url y archivo en caché y si es así, lo coge de caché y no lo solicita al servidor.

Un truco para evitar que el navegador mire en la caché es pedirle la misma página pero con diferente url, es decir, http://www.example.com/a.htm?1 es una url diferente a http://www.example.com/a.htm?2, pero sin embargo devuelve la misma página. Los parámetros que le pasamos a la página (1 y 2) no son interpretados, con lo que es como si no estuvieran pero hacen que la url sea diferente. Para asegurarse de que el parámetro siempre será diferente, podemos generarlo dinámicamente desde asp o cualquier otro lenguaje y podemos utilizar la función en jscript getTime(), que nos devuelve la cantidad de milisegundos transcurridos desde el 1 de Enero de 1970 hasta el momento actual. De esta manera, podemos generar los enlaces desde páginas asp con esta función:

<script language="jscript" runat="server">
function getTime() {
 var d = new Date();
 return d.getTime();
}
</script>

y generar el enlace así:

<a href="http://www.example.com/a.htm?<%=getTime()%>">Enlace sin cache</a>

que se convertiría en algo así:

<a href="http://www.example.com/a.htm?1224505518887">Enlace sin cache</a>

Este truco es especialmente útil cuando una página contiene un objeto flash. En el ejemplo anterior, llamando a http://www.example.com/a.htm?1224505518887 devuelve el código html actualizado, pero si hay algún objeto flash que queramos actualizar en el interior de la página, esta solución no funciona, ya que la url del objeto flash llamado siempre será la misma. Para resolver esto, hemos de aplicar la variable de tiempo anterior directamente a la llamada al objeto flash:

<object classid="clsid:d27...">
  <param name="movie" value="home.swf?<%=getTime()%>" />
  <embed src="home.swf?<%=getTime()%>" pluginspage... />
</object>

quedando algo así:

<object classid="clsid:d27...">
  <param name="movie" value="home.swf?1224505518887" />
  <embed src="home.swf?1224505518887" pluginspage... />
</object>

y lo guardamos como asp con la funcion jscript getTime definida. De esta manera nos aseguramos que el objeto flash será leído del servidor sin pasar por la caché sin necesidad de cambiarle el nombre al archivo. Después, simplemente hay que llamar a la página http://www.example.com/a.asp, sin la variable de tiempo, porque ya se genera en el código de la página y lo que realmente nos interesa actualizar es el objeto flash.

Este tipo de solución también se puede utilizar para refrescar la página cada ciertos segundos, como una página que visualice una webcam que actualiza las imágenes por FTP cada x segundos.

Etiquetas: , ,

Comments 1 Comentario »

Las expresiones regulares en programación son útiles para validar campos enviados y parámetros recibidos de formularios web en lenguaje ASP o Javascript.

Etiquetas: , , , , ,

Comments No Hay Comentarios »