jueves, 31 de octubre de 2013

Validación con expresiones regulares y Javascript

Las expresiones regulares son modelos que describen las combinaciones de caracteres en el texto. Se podrían definir como una serie de carácteres que forman un patrón, que representan a otro grupo de carácteres mayor, de tal forma que podemos comparar el patrón con otros conjuntos de carácteres para ver las coincidencias. Las expresiones regulares pueden utilizarse en múltiples lenguajes de programación pero en esta entrada vamos a ver un ejemplo de validación de formularios mediante Javascript y haciendo uso de expresiones regulares.
Un buen tutorial para iniciarse en el manejo de expresiones regulares lo podemos encontrar en Desarrolloweb. Para realizar el ejemplo siguiente no hay porque conocer en profundidad su manejo. A continuación muestro una serie de tablas a modo de chuleta para que podamos utilizarlas con un simple corta y pega.
La tabla siguiente contiene los caracteres especiales de las expresiones regulares.
CarácterTexto buscado
^
Principio de entrada o línea.
$
Fin de entrada o línea.
*
El carácter anterior 0 o más veces.
+
El carácter anterior 1 o más veces.
?
El carácter anterior una vez como máximo (es decir, indica que el carácter anterior es opcional).
.
Cualquier carácter individual, salvo el de salto de línea.
x|y
x o y.
{n}
Exactamente n apariciones del carácter anterior.
{n,m}
Como mínimo n y como máximo m apariciones del carácter anterior.
[abc]
Cualquiera de los caracteres entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [a-f] es equivalente a [abcdef]).
[^abc]
Cualquier carácter que no esté entre corchetes. Especifique un rango de caracteres con un guión (por ejemplo, [^a-f] es equivalente a [^abcdef]).
\b
Límite de palabra (como un espacio o un retorno de carro).
\B
Cualquiera que no sea un límite de palabra.
\d
Cualquier carácter de dígito. Equivalente a [0-9].
\D
Cualquier carácter que no sea de dígito. Equivalente a [^0-9].
\f
Salto de página.
\n
Salto de línea.
\r
Retorno de carro.
\s
Cualquier carácter individual de espacio en blanco (espacios, tabulaciones, saltos de página o saltos de línea).
\S
Cualquier carácter individual que no sea un espacio en blanco.
\t
Tabulación.
\w
Cualquier carácter alfanumérico, incluido el de subrayado. Equivalente a [A-Za-z0-9_].
\W
Cualquier carácter que no sea alfanumérico. Equivalente a [^A-Za-z0-9_].
La tabla siguiente contiene algunos de los patrones más utilizados a la hora de validar formularios. Si alguien conoce alguna expresión regular más -que pueda ser útil en la validación de formularios- la puede poner en los comentarios y yo la incorporaré a esta tabla.
Cualquier letra en minuscula[a-z]
Entero^(?:\+|-)?\d+$
Correo electrónico
/[\w-\.]{3,}@([\w-]{2,}\.)*([\w-]{2,}\.)[\w-]{2,4}/
URL
^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)( [a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$
Contraseña segura
(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$
(Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales)
Fecha
^\d{1,2}\/\d{1,2}\/\d{2,4}$
(Por ejemplo 01/01/2007)
Hora^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$
(Por ejemplo 10:45:23)
Número tarjeta de crédito
^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$
Número teléfono
^[0-9]{2,3}-? ?[0-9]{6,7}$
Código postal
^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$
Certificado Identificación Fiscal
^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)? [0-9A-Z]|\d{8}(-|\.)?[A-Z])$
Un ejemplo para controlar que la clave que se introduce sea segura podría ser:
<html >
<head>
<title></title>
<script type="text/javascript">
<!--
function validatePass(campo) {
    var RegExPattern = /(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$/;
    var errorMessage = 'Password Incorrecta.';
    if ((campo.value.match(RegExPattern)) && (campo.value!='')) {
        alert('Password Correcta'); 
    } else {
        alert(errorMessage);
        campo.focus();
    } 
}
//-->
</script>
</head>
<body>
<form action="#" method="post">
<p><input type="text" name="date" onblur="validatePass(this);">
  <input name="button" type="button" value="Probar">
  <br>
  Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no  puede contener caracteres espaciales
</form>
</body>
</html>  

lunes, 14 de octubre de 2013

Cargar imagen con jquery en HTML5

Documento sin título
Cargar imagen con jquery en HTML5
En esta ocasión les mostrare una nueva forma de cargar una imagen directamente desde javascript. Esto es posible gracias a HTML5 que incluye nuevas librerías para el manejo de archivos.
Bueno ahora miremos el siguiente código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script language="JavaScript" type="text/javascript" src="jquery.js" charset="utf-8"></script>
<script type="text/javascript" language="javascript">
$(window).load(function(){

 $(function() {
  $('#file-input').change(function(e) {
      addImage(e); 
     });

     function addImage(e){
      var file = e.target.files[0],
      imageType = /image.*/;
    
      if (!file.type.match(imageType))
       return;
  
      var reader = new FileReader();
      reader.onload = fileOnload;
      reader.readAsDataURL(file);
     }
  
     function fileOnload(e) {
      var result=e.target.result;
      $('#imgSalida').attr("src",result);
     }
    });
  });
</script>
</head>
<body>
 <input name="file-input" id="file-input" type="file" />
   <br />
   <img id="imgSalida" width="50%" height="50%" src="" />
</body>
</html>
Explicación del código
Bueno primero necesitamos un input file para cargar el archivo y a este le asignamos al evento change un método llamado addImage() para que procese la imagen seleccionada.
$('#file-input').change(function(e) { addImage(e); });
El método addImage() seleccionara el archivo y aplicara un filtro para que solo se pueda seleccionar imágenes.
var file = e.target.files[0],
imageType = /image.*/;
if (!file.type.match(imageType))
return;
Después se cargará el archivo en memoria y se asignará a un método fileOnload() el procesamiento de los datos.
var reader = new FileReader();
reader.onload = fileOnload;
reader.readAsDataURL(file);
Por último se guarda los datos de la imagen en una variable y se agregara los datos al atributo src del img.
function fileOnload(e) {
var result=e.target.result;
$('#imgSalida').attr("src",result);
}
Nota: La variable result contiene los datos de la imagen en codificación base64.
Demostración

Sacado del blog http://www.purojavascript.com/

viernes, 13 de abril de 2012

JavaScript Eventos


Los eventos son acciones que pueden ser detectados por JavaScript.

Actuar para un evento

El siguiente ejemplo muestra la fecha en que se hace clic en un botón:

Ejemplo

<html>

<head>
<script type="text/javascript">
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>
</head>

<body>

<h1>My First Web Page</h1>

<p id="demo"></p>

<button type="button" onclick="displayDate()">Display Date</button>

</body>
</html>


Eventos

Mediante el uso de JavaScript, tenemos la capacidad de crear páginas web dinámicas. Los eventos son acciones que pueden ser detectados por JavaScript.
Cada elemento de una página web tiene ciertos eventos que pueden desencadenar un JavaScript.Por ejemplo, podemos usar el evento onClick de un elemento de botón para indicar que una función se ejecutará cuando un usuario hace clic en el botón. Se definen los eventos en las etiquetas HTML.
Ejemplos de eventos:
  • Un clic del ratón
  • Una página web o una carga de imágenes
  • Pasar el ratón sobre un punto caliente en la página web
  • Selección de un campo de entrada en un formulario HTML
  • Envío de un formulario HTML
  • Un golpe de teclado
Nota: Los eventos se utiliza normalmente en combinación con las funciones y la función no se ejecutará antes de que el evento!


onLoad y onUnload

Los eventos onLoad y onUnload se activan cuando el usuario entra o sale de la página.
El evento onLoad se utiliza a menudo para comprobar el tipo de visitante navegador y versión de navegador y cargar la versión correcta de la página web sobre la base de la información.
Tanto el onLoad y eventos onUnload también se utiliza a menudo para hacer frente a las cookies, que debe tomarse cuando un usuario entra o sale de una página. Por ejemplo, usted podría tener un emergente de lo pregunte el nombre del usuario en su primera llegada a la página. El nombre se almacena en una cookie. La próxima vez que el visitante llega a su página, usted podría tener otro mensaje diciendo algo como: "Bienvenido Juan Pérez".

onfocus, onblur y onChange

Los eventos del onfocus, onblur y onChange se utilizan a menudo en combinación con la validación de campos de formulario.
A continuación se muestra un ejemplo de cómo utilizar el evento onChange. La función de checkEmail () se llama cuando el usuario cambia el contenido del campo:
<input type="text" size="30" id="email" onchange="checkEmail()" />


onSubmit

El evento onsubmit se utiliza para validar todos los campos del formulario antes de enviarlo.
A continuación se muestra un ejemplo de cómo utilizar el evento onSubmit. El checkForm () la función se llama cuando el usuario hace clic en el botón de enviar en el formulario. Si los valores de los campos no son aceptadas, el submit se debe cancelar. El checkForm function () devuelve verdadero o falso. Si devuelve true el formulario se haya presentado, de lo contrario el submit será cancelado:
<form method="post" action="xxx.htm" onsubmit="return checkForm()">


onMouseOver

El evento onmouseover se puede utilizar para activar una función cuando el usuario pasa el ratón sobre un elemento HTML:

JavaScript Lanza Declaración


JavaScript Lanza Declaración



La sentencia throw le permite crear una excepción.

La sentencia throw

La sentencia throw le permite crear una excepción. Si se utiliza esta sentencia junto con el try ... catch, es posible controlar el flujo del programa y generar mensajes de error exactos.

Sintaxis

throw exception
La excepción puede ser una cadena, un entero, booleano o un objeto.
Tenga en cuenta que tiro está escrito en letras minúsculas. Uso de mayúsculas va a generar un error de JavaScript!

Ejemplo

El ejemplo siguiente determina el valor de una variable llamada x. Si el valor de x es superior a 10, inferior a 5, o no un número, vamos a lanzar un error. El error es entonces capturada por el argumento de la captura y el mensaje de error adecuado se muestra:

Ejemplo

<html>
<body>
<script type="text/javascript">
var x=prompt("Enter a number between 5 and 10:","");
try
  {
  if(x>10)
    {
    throw "Err1";
    }
  else if(x<5)
    {
    throw "Err2";
    }
  else if(isNaN(x))
    {
    throw "Err3";
    }
  }
catch(err)
  {
  if(err=="Err1")
    {
    document.write("Error! The value is too high.");
    }
  if(err=="Err2")
    {
    document.write("Error! The value is too low.");
    }
  if(err=="Err3")
    {
    document.write("Error! The value is not a number.");
    }
  }
</script>
</body>
</html>

Try ... Catch Declaración


Try ... Catch Declaración


El try ... catch le permite probar un bloque de código para los errores.

- Los errores de JavaScript Catching

Al navegar por páginas web en Internet, todos hemos visto a un cuadro de alerta JavaScript que nos dice que hay un error de ejecución y preguntando "¿Desea realizar una depuración?". Mensaje de error de este tipo puede ser útil para los desarrolladores, pero no para los usuarios. Cuando los usuarios vean los errores, a menudo dejan la página Web.
Este capítulo le enseñará cómo capturar y manejar mensajes de error de JavaScript, de modo que no pierda su público.

El try ... catch

El try ... catch le permite probar un bloque de código para los errores. El bloque try contiene el código para ser ejecutado, y el bloque catch contiene el código que se ejecutará si se produce un error.

Sintaxis

try
  {
  //Run some code here
  }
catch(err)
  {
  //Handle errors here
  }
Tenga en cuenta que try ... catch se escribe en letras minúsculas. Uso de mayúsculas va a generar un error de JavaScript!

Ejemplos

El siguiente ejemplo se supone que debe alertar a los "Bienvenido!" cuando se pulsa el botón. Sin embargo, hay un error tipográfico en el mensaje de la función (). alert () es incorrecta como adddlert (). Un error de JavaScript se produce. El bloque catch detecta el error y ejecuta un código personalizado para manejar la situación. El código muestra un mensaje de error personalizado que informa al usuario lo que sucedió:

Ejemplo

<html>
<head>
<script type="text/javascript">
var txt="";
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="There was an error on this page.\n\n";
  txt+="Error description: " + err.message + "\n\n";
  txt+="Click OK to continue.\n\n";
  alert(txt);
  }
}
</script>
</head>

<body>
<input type="button" value="View message" onclick="message()" />
</body>

</html>
El siguiente ejemplo utiliza una caja de confirmación para mostrar un mensaje personalizado diciendo a los usuarios que pueden hacer clic en Aceptar para continuar viendo la página o haga clic en Cancelar para volver a la página principal. Si el método de confirmación devuelve false, el usuario hizo clic en Cancelar, y el código redirige al usuario. Si el método de confirmación devuelve true, el código no hace nada:

Ejemplo

<html>
<head>
<script type="text/javascript">
var txt="";
function message()
{
try
  {
  adddlert("Welcome guest!");
  }
catch(err)
  {
  txt="There was an error on this page.\n\n";
  txt+="Click OK to continue viewing this page,\n";
  txt+="or Cancel to return to the home page.\n\n";
  if(!confirm(txt))
    {
    document.location.href="http://www.w3schools.com/";
    }
  }
}
</script>
</head>

<body>
<input type="button" value="View message" onclick="message()" />
</body>

</html>

La sentencia throw

La sentencia throw se puede utilizar junto con el try ... catch, para crear una excepción para el error. Más información sobre la instrucción throw en el próximo capítulo.