sábado, 18 de diciembre de 2010

JavaScript - Validar ingreso de texto

Si qusieramos validar que sólo se ingrese texto lo hacemos con la siguiente función:


<html>
<body>

<script type="text/javascript">

function textonly(e){
var code;

if (!e) var e = window.event;
if (e.keyCode)
code = e.keyCode;
else
if (e.which)
code = e.which;
var character = String.fromCharCode(code);
var AllowRegex = /^[\ba-zA-Z\s-]$/;
if (AllowRegex.test(character)) return true;
return false;
}

</script>

<td width="15%">Ingrese solo texto </td>
<input name="nombre" size="30" onkeypress="return textonly(event);"/>

</body>
</html>


Hay un sitio muy interesante donde podemos probar nuestro código.
Vaya a http://www.w3schools.com/js/tryit.asp?filename=tryjs_intro y pegue en la parte izquierda cualquiera de los ejemplos aquí presentados, a continuación haga click en Edit and Click Me.

JavaScript - Validar ingreso de numeros

Validar que solo se ingresen numeros en un input:

<html>
<body>

<script type="text/javascript">

function numbersonly(myfield, e, dec){

var key;
var keychar;

if (window.event)
key = window.event.keyCode;

else if (e)
key = e.which;
else
return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) ||
(key==9) || (key==13) || (key==27) )
return true;
// numbers
else if ((("0123456789").indexOf(keychar) > -1))
return true;
// decimal point jump
else if (dec && (keychar == "."))
{
myfield.form.elements[dec].focus();
return false;
}
else
return false;
}


</script>

<td width="15%">Ingrese solo numeros </td>
<input name="nombre" size="30" onkeypress="return numbersonly(this,event);"/>

</body>
</html>


domingo, 28 de febrero de 2010

Patrones de Diseño (Primera Entrega)

Extraído del libro: Patrones de diseño de erich gamma

Patrones de Diseño

En general un patrón tiene 4 elementos esenciales:

Nombre: Permite describir un problema de diseño junto con sus soluciones y consecuencias.

El Problema: Describe cuándo aplicar el patrón. Explica el problema y su contexto. A veces el problema incluye una serie de condiciones que deben darse para que tenga sentido aplicar el patrón.

La Solución: Describe elementos que constituyen el diseño, sus relaciones, responsabilidades y colaboraciones.

Las Consecuencias: Son los resultados así como las ventajas e inconvenientes de aplicar el patrón. Son fundamentales para evaluar las alternativas de diseño y comprender los costos y beneficios de aplicar el patrón.

Patrones de Creación

Un patrón de creación de clases usa la herencia para cambiar la clase de la instancia a crear, mientras que un patrón de creación de objetos delega la creación de la instancia en otro objeto.

Hay dos temas recurrentes en estos patrones. En primer lugar, todos ellos encapsulan el conocimiento sobre las clases concretas que usa el sistema. Segundo, todos ocultan cómo se crean y se asocian las instancias de estas clases. Todo lo que el sistema conoce acerca de los objetos son sus interfaces, tal y como las definen sus clases abstractas.

El ejemplo tratado aquí es la construcción de un laberinto. A veces el juego consistirá simplemente en encontrar la salida del laberinto; en ese caso el jugador probablemente sólo tendrá una visión local del laberinto. Otras veces el laberinto contendrá problemas que resolver y peligros que superar, y estos juegos pueden proporcionar un plano de la parte del laberinto que ha sido explorada. Nos centraremos en cómo se crean los laberintos y definimos a un laberinto como un conjunto de habitaciones. Una habitación conoce sus límites; estos pueden ser otra habitación, una pared o una puerta a otra habitación. Las clases Habitación, Puerta y Pared definen los componentes del laberinto. La clase LugarDelMapa es la clase abstracta común de todos los componentes de un laberinto. LugarDelMapa sólo define una operación, Entrar. Su significado depende de en dónde estemos entrando. Si entramos en una habitación cambiará nuestra posición. Si tratamos de entrar en una puerta, puede pasar dos cosas: si la puerta está abierta, pasaremos a la siguiente habitación, si está cerrada, nos daremos con ella de nariz.

enum Direccion {Norte, Sur, Este, Oeste

};

Clases:

class LugarDelMapa {

public:

virtual void Entrar() = 0;

};

Habitación es la subclase concreta de LugarDelMapa que define las relaciones principales entre los componentes del laberinto. Mantiene referencias a otros objetos LugarDelMapa y guarda su número de habitación. Este número identificará las habitaciones del laberinto.

class Habitación: public LugarDelMapa {

public :

Habitación (int numHabitacion);

LugarDelMapa* ObtenerLado (Direccion) const;

void EstablecerLado (Direccion, LugarDelMapa*);

virtual void Entrar();

prívate:

LugarDelMapa* _lados[4];

Int _numeroHabitacion;

};

class Pared : public LugarDelMapa {

public:

Pared();

virtual void Entrar();

};


class Puerta : public LugarDelMapa {

public :

Puerta (Habitacion* = 0,Habitacion* = 0);

virtual void Entrar();

Habitacion* OtroLadoDe (Habitacion*);

private:

Habitacion* _habitacion1;

Habitacion* _habitacion2;

bool _estaAbierta;

};

Definiremos una clase Laberinto que represente una serie de habitaciones. Laberinto también puede encontrar una determinada habitación usando su operación NumeroDeHabitación.

class Laberinto {

public:

Laberinto();

void AñadirHabitación (Habitacion*);

Habitacion* NumeroDeHabitacion (int) const;

private:

// …

};

Otra clase que definiremos es JuegoDeLaberinto, que es la que crea el laberinto.