Professional Documents
Culture Documents
I. OBJETIVOS
Que el estudiante:
Comprenda la utilidad de las expresiones regulares para resolver problemas dentro de los scripts.
Aplicar expresiones regulares para validar información ingresada en campos de formularios.
Utilizar expresiones regulares para reemplazar texto.
Utilizar los métodos relacionados con expresiones regulares del objeto RegExp.
Expresiones regulares
Las expresiones regulares son patrones usados para gestionar la concordancia o coincidencia de patrones de
caracteres con cadenas de prueba. Dicho de otra forma, una expresión regular permite especificar patrones de
caracteres que serán comparados con cadenas de texto con el objeto de validar datos de entrada, realizar
búsquedas y/o reemplazos.
Entre las utilidades más comunes de las expresiones regulares están la comprobación de datos introducidos
en formularios, la creación y el análisis de cookies, la construcción y modificación de cadenas de texto, etc.
Las expresiones regulares permiten el reconocimiento y extracción de casi cualquier tipo de datos de cadena
con formato predecible como pueden ser direcciones URL, direcciones de correo electrónico, números de
teléfono, números de identificación, cookies, etc.
1 / 33
Guía # 6: Expresiones regulares con JavaScript
Cuando se utiliza el constructor RegExp deben enviarse como argumentos del constructor, el patrón deseado
y el modificador especial para dicho patrón introducido como primer argumento. Este segundo argumento es
opcional. Veamos el siguiente ejemplo:
var pattern = new RegExp("http://");
Usando modificadores:
var pattern = new RegExp(http://, "i");
La sintaxis de constructor se utiliza con mayor frecuencia cuando el patrón a comparar no se determina hasta
el momento de la ejecución. Podríamos permitir al usuario introducir la expresión regular y luego pasarla al
constructor RegExp() como argumento.
Por ejemplo, el resultado de la evaluación de la expresión regular que se muestra en el siguiente segmento de
código dará un resultado de falso:
var re = /^http/;
re.test("El protocolo es http");
Pero si creamos la expresión regular con el símbolo $ el resultado será verdadero si escribimos:
var re = /http$/;
re.test("El protocolo es http");
Códigos de escape
Las expresiones regulares de JavaScript utilizan códigos de escape para indicar caracteres que podrían
generar ambigüedad al utilizarlos dentro de la definición del patrón de una expresión regular. Cada carácter
de código de escape se especifica utilizando un carácter de barra invertida (\). Los códigos de escape
utilizados en JavaScript son un superconjunto de los utilizados en las cadenas. El conjunto completo de
caracteres de códigos de escape se muestran en la siguiente tabla:
Por ejemplo, el resultado de la evaluación de la siguiente expresión regular dará como resultado falso:
var re = /http:\/\//;
re.test(“www.udb.edu.sv”);
Cuantificadores de repetición
Estos caracteres permiten indicar la cantidad de veces que un elemento anterior al cuantificador de repetición
en la expresión, puede o debe aparecer. Entiéndase por elemento el carácter o conjunto de caracteres anterior.
Los cuantificadores de repetición se muestran en la siguiente tabla:
CARÁCTER Significado
* Busca coincidencia con el elemento (carácter) anterior cero o más
veces.
+ Busca coincidencia con el elemento (carácter) anterior una o más
veces.
? Busca coincidencia con el elemento (carácter) anterior cero o una
vez, pero no más.
{m} Busca coincidencia con el elemento (carácter) anterior exactamente
m veces.
{m, n} Busca coincidencia con el elemento (carácter) anterior un mínimo
de m veces y un máximo de n veces.
{m, } Busca coincidencia con el elemento (carácter) anterior m o más
veces.
Agrupamiento de caracteres
JavaScript permite agrupar caracteres utilizando paréntesis. Muchas veces se requiere que el elemento
anterior no sea un carácter específico sino un grupo de posibilidades de caracteres. Cualquier grupo de
secuencias de códigos de expresiones regulares encerrado entre paréntesis es considerado una unidad para
los operadores de las expresiones regulares. Por ejemplo:
var patron = /a(bc)+/;
Buscará correspondencias con cadenas que contengan una letra a, no necesariamente al comienzo, seguido de
una o más repeticiones de "bc".
En el caso de querer especificar en un patrón clases de caracteres como caracteres válidos se pueden mostrar
un conjunto de caracteres encerrados entre corchetes. Esto indicará que se acepta como coincidente cualquier
cadena que contenga alguno de esos caracteres. Por ejemplo:
var patron = /[1234567890]/;
Encontrará coincidencias con cadenas que contengan un número. Como "2227-3735", "Tenía 1", "1 gol", etc.
No encontrará coincidencia con: "Primero uno", "dos tres cuatro", etc.
Al querer establecer un conjunto consecutivo de caracteres demasiado grande para mostrarlos uno a uno. Se
puede utilizar el guión ("-") para indicar un rango de caracteres. Por ejemplo:
var patron = /[0-9]/; //Busca correspondencia con cualquier cadena que contenga número
var patron = /[a-zA-Z]/; //Busca correspondencia con cualquier carácter alfabético
var patron = /[a-zA-Z0-9]/;//Busca correspondencia con cualquier carácter alfanumérico
Los corchetes también se pueden utilizar para describir clases de caracteres negativos. Estas clases especifican
caracteres que no pueden estar presentes. Una clase negativa se especifica anteponiendo el carácter
cincunflejo ("^") al inicio de la clase. Por ejemplo:
var patron = /[^a-zA-Z]+/; //Coincidirá con secuencias de uno o más caracteres no
//alfabéticos
NOTA IMPORTANTE: Recuerde que el circunflejo también se utiliza como indicador de posición. Usted
debe distinguirlo del uso como carácter negativo por el hecho de que en este último caso debe ir dentro de
los símbolos de corchetes.
Existen otras clases de caracteres, como el punto (".") que se utiliza para que se acepte cualquier carácter, con
excepción del salto de línea. También se puede utilizar la secuencia \s, para indicar que se acepta cualquier
carácter de espacio en blanco ( \t\n\r\f\v), \S para cualquier carácter que no sea espacio en blanco. \w, para
cualquier carácter alfanumérico y \W, para cualquier carácter que no sea alfanumérico. \d, para cualquier
carácter de dígito. \D para cualquier carácter que no sea dígito.
Subexpresiones
En expresiones regulares una subexpresión consiste en crear una expresión regular compuesta de varias
secciones individuales delimitadas por paréntesis. Cuando se tienen subexpresiones la expresión regular se
compone de más de un grupo de paréntesis, de forma que cada subexpresión puede ser referida de forma
individual utilizando propiedades estáticas del objeto RegExp.
El siguiente ejemplo ilustra el uso de las subexpresiones:
var customer = "Ricardo 2227-3735";
var pattern = /(\w+) ([\d-]+)/;
pattern.test(customer);
Para poder acceder de forma individual a cada una de las subexpresiones de la expresión regular anterior se
hace uso de propiedades especiales utilizando la siguiente sintaxis: $1, $2, $3, …, $9. Cada una de las
propiedades anteriores recorre la expresión regular de izquierda a derecha, de modo que $1 accede a la
subexpresión de más a la izquierda (o la primera), $2, hace referencia a la segunda subexpresión más a la
izquierda (segunda), y así sucesivamente, hasta llegar a la última subexpresión.
Para el caso del ejemplo anterior podríamos escribir una sentencia como la siguiente para acceder a las dos
subexpresiones y mostrar los componentes de la cadena compuesta en la variable customer:
alert("$1 = " + RegExp.$1 + "\n$2 = " + RegExp.$2);
NOTA IMPORTANTE: Según la especificación ECMA debería poder accederse a más de 9 subexpresiones
dentro de una misma expresión regular. Sin embargo, el soporte a esta característica por parte de los
navegadores no se puede asumir por defecto. Sería de probar en cada uno a ver hasta cuántas
subexpresiones se puede tener acceso. La recomendación es no hacerlo a más de nueve; es decir, desde $1
hasta $9.
CARÁCTER Significado
exec Método del objeto RegExp que realiza una búsqueda por una
coincidencia en una cadena. El método exec() devuelve un arreglo
(array) con información diversa. Esta información puede ser
accedida mediante propiedades referidas al objeto en el que se
asigna la ejecución del método exec().
test Es el método más básico del objeto RegExp realiza un análisis en la
cadena pasada como argumento para encontrar si hay coincidencia
con el patrón definido. Este método devuelve un valor lógico (true
o false).
match Método del objeto String que realiza la búsqueda de una
coincidencia dentro de una cadena. Retorna un arreglo con
información o un valor nulo en caso de haber error.
search Es un método del objeto String que realiza una búsqueda de un
patrón dentro de una cadena. Devuelve el índice del carácter en el
que empieza la primera subcadena coincidente.
replace Este método del objeto String devuelve una cadena que resulta de
reemplazar el texto que coincide con el primer argumento (una
expresión regular) dentro del segundo argumento (una cadena). Si
se utiliza el modificador g se reemplazan todas las coincidencias en
la cadena. De lo contrario sólo se reemplaza la primera
coincidencia.
split Este método del objeto String divide una cadena en subcadenas y
las devuelve en un arreglo (array).
IV. PROCEDIMIENTO
INDICACIONES. Cree una estructura de carpetas para almacenar en el servidor web los guiones o secuencias
de comando que desarrollará durante esta guía de práctica. Se sugiere que cree una estructura con una
carpeta llamada lic, dentro de la cual creará una carpeta para cada ejemplo del procedimiento, a las que puede
llamar ejemplo1, ejemplo2, …, ejemploN (donde N es un entero) y dentro de cada una de estas carpetas una
para hojas de estilo con nombre css, otra para los guiones de JavaScript que puede llamar js, otra para las
imágenes, si las utiliza, a la que podrá llamar img y otra para las fuentes, si las utiliza, a la que llamará fonts.
Ejemplo #1: En el siguiente ejemplo se utilizan expresiones regulares para validar distintos tipos de datos
que es usual ingresar en ciertos formularios, como el DUI, NIT, tarjeta de crédito, carnet de la UDB y
número de teléfono de El Salvador. Al seleccionar el tipo de dato se solicita en un campo de texto de
formulario ingresar el valor correspondiente y al presionar el botón enviar se valida que el dato ingresado
sea del formato correcto de acuerdo al tipo de dato seleccionado en el campo select.
Guión 1: validacion.html
<!DOCTYPE html>
<html lang="es">
<head>
<title>Validador de datos</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/fonts.css" />
<link rel="stylesheet" href="css/formstyle.css" />
<script type="text/javascript" src="js/validatedata.js"></script>
<!-- Para las versiones anteriores -->
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<div class="wrapper">
<form action="javascript:void(0)" name="frmdatos" id="dataform">
<h2 class="contact">Validador de datos</h2>
<span class="contact">
<label for="tipo">Seleccione el tipo de dato:</label>
</span>
<select name="seltipo" id="tipo">
<option value="dui" selected>DUI</option>
<option value="nit">NIT</option>
<option value="tarjeta">Tarjeta de crédito</option>
<option value="carnet">Carnet UDB</option>
<option value="telefono">Teléfono</option>
</select>
<span class="contact">
<label for="txtdato">Dato:</label>
</span>
<input type="text" name="txtdato" id="data" value="" maxlength="20"
placeholder="(Ingrese el dato)" /><br />
<input type="button" name="btnvalidar" id="validar" value="Validar" />
</form>
</div>
</body>
</html>
Guión 2: fonts.css
@font-face {
font-family: 'YanoneKaffeesatzRegular';
src: url('../fonts/YanoneKaffeesatz-Regular-webfont.eot');
src: url('fonts/YanoneKaffeesatz-Regular-webfont.eot?#iefix') format('embedded-
opentype'),
url('../fonts/YanoneKaffeesatz-Regular-webfont.woff') format('woff'),
url('../fonts/YanoneKaffeesatz-Regular-webfont.ttf') format('truetype'),
url('../fonts/YanoneKaffeesatz-Regular-webfont.svg#YanoneKaffeesatzRegular')
format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'BebasNeueRegular';
src: url('../fonts/BebasNeue-webfont.eot');
src: url('../fonts/BebasNeue-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/BebasNeue-webfont.woff') format('woff'),
url('../fonts/BebasNeue-webfont.ttf') format('truetype'),
url('../fonts/BebasNeue-webfont.svg#BebasNeueRegular') format('svg');
font-weight: normal;
font-style: normal;
}
Guión 3: formstyle.css
body, div, h1, form, fieldset, input, textarea {
margin: 0;
padding: 0;
border: 0;
outline: none;
}
html {
height: 100%;
}
body {
background: #A4EB90;
background-image: -webkit-gradient(
linear,
left top,
left bottom,
color-stop(0, #A4EB90),
color-stop(1, #55963F)
);
background-image: -o-linear-gradient(bottom, #A4EB90 0%, #55963F 100%);
background-image: -moz-linear-gradient(bottom, #A4EB90 0%, #55963F 100%);
background-image: -webkit-linear-gradient(bottom, #A4EB90 0%, #55963F 100%);
background-image: -ms-linear-gradient(bottom, #A4EB90 0%, #55963F 100%);
background-image: linear-gradient(to bottom, #A4EB90 0%, #55963F 100%);
font-family: sans-serif;
}
.wrapper{
background:#CCC;
width:800px;
margin: 16px auto;
padding: 10px 30px;
}
h2.contact {
background: url(../img/validatedata.png) no-repeat -16px -50px;
color: #ff5400;
font-family: 'YanoneKaffeesatzRegular';
font-size: 66px;
height: 105px;
padding-left: 150px;
}
span.contact {
color: #4b4b4b;
font-family: 'BebasNeueRegular', Arial;
font-size: 24px;
line-height: 36px;
margin-bottom: 15px;
input[type="text"] {
width: 236px;
}
textarea {
width: 600px;
height: 275px;
}
label {
color: #ff5400;
}
input,
textarea,
select {
background-color: rgba(255, 255, 255, 0.4);
border: 5px solid rgba(122, 192, 0, 0.15);
padding: 10px;
font-family: 'Keffeesatz', Arial;
color: #4b4b4b;
font-size: 24px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
border-radius: 5px;
margin-bottom: 15px;
margin-top: -10px;
}
input:focus,
textarea:focus,
select:focus {
background-color: rgba(255,255,255,1);
border: 5px solid #ff5400;
}
input[type="button"] {
background: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.23, #619702),
color-stop(0.62, #7ac000)
);
background: -moz-linear-gradient(
center bottom,
#619702 23%,
#7ac000 62%
);
border: none; cursor: pointer; color: #fff;
font-size: 24px;
background-color: #7ac000;
padding: 5px 36px 8px 36px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-webkit-box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.4);
-moz-box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.6);
border-bottom: 1px solid rgba(0, 0, 0, 0.4);
input[type="button"]:hover {
background: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0.23, #c34000),
color-stop(0.62, #ff5400)
);
background: -moz-linear-gradient(
center bottom,
#c34000 23%,
#ff5400 62%
);
color: #fff; border-bottom: 1px solid rgba(0, 0, 0, 0.4); background-color: #ff5400;
}
input[type="button"]:active {
top: 1px;
}
Guión 4: validatedata.js
function iniciar(){
var boton = document.getElementById("validar");
if(boton.addEventListener){
boton.addEventListener("click", validar, false);
}
else if(boton.attachEvent){
boton.attachEvent("onclick", validar);
}
}
function validar(){
var tipo = document.frmdatos.seltipo.options[frmdatos.seltipo.selectedIndex].value;
var dato = document.frmdatos.txtdato.value;
var valido = false;
var re = null;
//alert(dato + "|" + tipo);
if(dato == null || dato == "" || dato.length == 0){
alert("No se ha ingresado ningún valor en el campo de formulario");
return 0;
}
switch(tipo){
//El formato de DUI en El Salvador es ########-#
case "dui":
re = /^\d{8}-\d{1}$/;
if(re.test(dato)){
valido = true;
}
break;
//El formato del NIT en El Salvador es ####-######-###-#
case "nit":
re = /^[0-9]{4}-[0-9]{6}-[0-9]{3}-[0-9]{1}$/;
if(re.test(dato)){
valido = true
}
break;
//Solo aplica para tarjetas de crédito Visa y Master Card
//en las que el formato es ####-####-####-####
case "tarjeta":
re = /^(\d{4}-){3}(\d{4}){1}$/;
if(re.test(dato)){
valido = true;
}
break;
//El formato en los carnets de la UDB es LL######
case "carnet":
re = /^[A-Z]{2}[0-9]{6}$/;
if(re.test(dato)){
valido = true;
}
break;
//El formato de número telefónico en El Salvador es ####-####
case "telefono":
re = /^\d{4}-\d{4}$/;
if(re.test(dato)){
valido = true;
}
break;
default:
alert("El tipo de dato seleccionado no puede ser procesado");
break;
}
if(valido == true){
alert("El valor " + dato + " de " + tipo + " ingresado es válido");
}
else if(valido == false){
alert("El valor " + dato + " de " + tipo + " ingresado es inválido");
}
}
Ejemplo#2: El siguiente ejemplo permite validar el tipo de archivo que se intenta subir a un servidor web,
mediante el uso de un campo de formulario de tipo file. El control se simula usando un elemento label y
ocultando el verdadero campo input type="file". La validación que se hace usando una expresión regular
que verifica el nombre del archivo y la extensión, para que sólo acepte archivos de imagen que se puedan
publicar en la web, como .jpg, .png y .gif.
Guión 1: validadorarchivos.html
<!DOCTYPE html>
<html lang="es">
<head>
<title>Validador de archivos</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/search.css" />
<link rel="stylesheet" href="css/button.css" />
<script type="text/javascript" src="js/setvalue.js"></script>
<!-- Para las versiones anteriores del IE9 -->
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<header>
Guión 2: button.css
.bluebutton {
background-color:#3bb3e0;
font-family: 'Open Sans', sans-serif;
font-size:13px;
font-weight:Bold;
text-decoration:none;
color:#fff;
position:relative;
padding:10px 20px;
padding-right:50px;
margin-bottom: 30px;
background-image: linear-gradient(bottom, rgb(44,160,202) 0%, rgb(62,184,229) 100%);
background-image: -o-linear-gradient(bottom, rgb(44,160,202) 0%, rgb(62,184,229)
100%);
background-image: -moz-linear-gradient(bottom, rgb(44,160,202) 0%, rgb(62,184,229)
100%);
background-image: -webkit-linear-gradient(bottom, rgb(44,160,202) 0%, rgb(62,184,229)
100%);
background-image: -ms-linear-gradient(bottom, rgb(44,160,202) 0%, rgb(62,184,229)
100%);
background-image: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0, rgb(44,160,202)), color-stop(1, rgb(62,184,229)));
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
border-radius: 5px;
-webkit-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 5px 0px 0px #156785, 0px 10px 5px
#999;
-moz-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 5px 0px 0px #156785, 0px 10px 5px
#999;
-o-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 5px 0px 0px #156785, 0px 10px 5px #999;
-ms-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 5px 0px 0px #156785, 0px 10px 5px #999;
box-shadow: inset 0px 1px 0px #2ab7ec, 0px 5px 0px 0px #156785, 0px 10px 5px #999;
color:#fff;
}
.bluebutton:active {
top:3px;
background-image: linear-gradient(bottom, rgb(62,184,229) 0%, rgb(44,160,202) 100%);
background-image: -o-linear-gradient(bottom, rgb(62,184,229) 0%, rgb(44,160,202)
100%);
background-image: -moz-linear-gradient(bottom, rgb(62,184,229) 0%, rgb(44,160,202)
100%);
background-image: -webkit-linear-gradient(bottom, rgb(62,184,229) 0%, rgb(44,160,202)
100%);
background-image: -ms-linear-gradient(bottom, rgb(62,184,229) 0%, rgb(44,160,202)
100%);
background-image: -webkit-gradient(
linear,
left bottom,
left top,
color-stop(0, rgb(62,184,229)),
color-stop(1, rgb(44,160,202))
);
-webkit-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 2px 0px 0px #156785, 0px 5px 3px
#999;
-moz-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 2px 0px 0px #156785, 0px 5px 3px #999;
-o-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 2px 0px 0px #156785, 0px 5px 3px #999;
-ms-box-shadow: inset 0px 1px 0px #2ab7ec, 0px 2px 0px 0px #156785, 0px 5px 3px #999;
box-shadow: inset 0px 1px 0px #2ab7ec, 0px 2px 0px 0px #156785, 0px 5px 3px #999;
}
.bluebutton:before {
background-color:#2591b4;
background-repeat:no-repeat;
background-position:center center;
content:"";
width:20px;
height:20px;
position:absolute;
right:15px;
top:50%;
margin-top:-9px;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-o-border-radius: 50%;
-ms-border-radius: 50%;
border-radius: 50%;
-webkit-box-shadow: inset 0px 1px 0px #052756, 0px 1px 0px #60c9f0;
-moz-box-shadow: inset 0px 1px 0px #052756, 0px 1px 0px #60c9f0;
-o-box-shadow: inset 0px 1px 0px #052756, 0px 1px 0px #60c9f0;
-ms-box-shadow: inset 0px 1px 0px #052756, 0px 1px 0px #60c9f0;
box-shadow: inset 0px 1px 0px #052756, 0px 1px 0px #60c9f0;
}
.bluebutton:active::before {
top:50%;
margin-top:-12px;
-webkit-box-shadow: inset 0px 1px 0px #60c9f0, 0px 3px 0px #0e3871, 0px 6px 3px
#1a80a6;
-moz-box-shadow: inset 0px 1px 0px #60c9f0, 0px 3px 0px #0e3871, 0px 6px 3px #1a80a6;
-o-box-shadow: inset 0px 1px 0px #60c9f0, 0px 3px 0px #0e3871, 0px 6px 3px #1a80a6;
-ms-box-shadow: inset 0px 1px 0px #60c9f0, 0px 3px 0px #0e3871, 0px 6px 3px #1a80a6;
box-shadow: inset 0px 1px 0px #60c9f0, 0px 3px 0px #0e3871, 0px 6px 3px #1a80a6;
}
Guión 3: search.css
* {
margin: 0;
padding: 0;
}
html {
height: 100%;
}
body {
background: rgba(245,241,193,1);
background: -moz-linear-gradient(-45deg, rgba(245,241,193,1) 0%, rgba(230,192,145,1)
100%);
background: -webkit-gradient(left top, right bottom, color-stop(0%,
rgba(245,241,193,1)), color-stop(100%, rgba(230,192,145,1)));
background: -webkit-linear-gradient(-45deg, rgba(245,241,193,1) 0%,
rgba(230,192,145,1) 100%);
background: -o-linear-gradient(-45deg, rgba(245,241,193,1) 0%, rgba(230,192,145,1)
100%);
background: -ms-linear-gradient(-45deg, rgba(245,241,193,1) 0%, rgba(230,192,145,1)
100%);
background: linear-gradient(135deg, rgba(245,241,193,1) 0%, rgba(230,192,145,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f1c1',
endColorstr='#e6c091', GradientType=1 );
}
/* Contenedor */
#wrap {
height: auto;
margin: 24px auto;
width: 480px;
}
header h1 {
color: #352540;
font-family: "Avant Garde", Avantgarde, "Century Gothic", CenturyGothic,
"AppleGothic", sans-serif;
font-size: 56px;
letter-spacing: .15em;
margin-top: 20px;
margin-bottom: 60px;
text-align: center;
text-shadow:
1px -1px 0 #767676,
-1px 2px 1px #737272,
-2px 4px 1px #767474,
-3px 6px 1px #787777,
-4px 8px 1px #7b7a7a,
-5px 10px 1px #7f7d7d,
-6px 12px 1px #828181,
-7px 14px 1px #868585,
-8px 16px 1px #8b8a89,
-9px 18px 1px #8f8e8d,
-10px 20px 1px #949392,
-11px 22px 1px #999897,
-12px 24px 1px #9e9c9c,
-13px 26px 1px #a3a1a1,
-14px 28px 1px #a8a6a6,
-15px 30px 1px #adabab,
-16px 32px 1px #b2b1b0,
-17px 34px 1px #b7b6b5,
-18px 36px 1px #bcbbba,
-19px 38px 1px #c1bfbf,
-20px 40px 1px #c6c4c4,
label.cargar:hover {
background-color: #9C60b3;
cursor: pointer;
filter: alpha(opacity = 75);
-ms-filter: "alpha(opacity=75)";
font-weight: bold;
opacity: 0.75;
}
input[type="text"] {
background: #ececec;
border: 3px ridge #633069;
border-radius: 6px;
float: left;
height: 18px;
padding: 3px 5px;
width: 320px;
}
Guión 4: setvalue.js
function init(){
var fileinput = document.getElementById("archivo");
var upload = document.getElementById("upload");
if(fileinput.addEventListener){
fileinput.addEventListener("change", function(){
setvalue(document.frmfile.archivo);
}, false);
}
else if(fileinput.attachEvent){
fileinput.attachEvent("onchange", function(){
setvalue(document.frmfile.archivo);
});
}
if(upload.addEventListener){
upload.addEventListener("click", function(){
submitFile(document.frmfile.archivo);
}, false);
}
else if(upload.attachEvent){
upload.attachEvent("onclick", function(){
submitFile(document.frmfile.archivo);
});
}
}
function submitFile(upload){
var archivo = document.frmfile.archivo.value;
if(archivo == null || archivo == "" || archivo.length == 0){
alert("No se ha seleccionado ningún archivo para subir al servidor.");
return false;
}
if(imgURL(upload.value)){
alert("El archivo " + upload.value + " es un archivo de imagen válido.");
return true;
}
alert("El archivo no es del tipo requerido.");
return false;
}
function setvalue(fileInput){
if(imgURL(fileInput.value)){
document.frmfile.urlarchivo.value = fileInput.value;
}
else {
alert("El archivo que intenta subir no es del tipo requerido");
return false;
}
}
function imgURL(url){
var re;
if(/[Ff]irefox/.test(navigator.userAgent)){
re = /^[0-9a-zA-Z ... ]+\.(jpg|png|gif)$/i;
}
else{
re = /(?:[\w]\:|\\)(\\[a-z_\-\s0-9\.]+)+\.(jpg|png|gif)$/i;
}
if(re.test(url)){
return true;
}
return false;
}
if(window.addEventListener){
window.addEventListener("load", init, false);
}
else{
window.attachEvent("onload", init);
}
Ejemplo #3: El siguiente ejemplo muestra cómo ir contando palabras que se ingresan en un campo textarea
y mostrar mientras se escribe en un campo de texto de solo lectura
Guión 1: contadorpalabras.html
<!DOCTYPE html>
<html lang="es">
<head>
<title>Contador de palabras</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/font.css" />
<link rel="stylesheet" href="css/formstyle.css" />
<script type="text/javascript" src="js/wordcount.js"></script>
<!-- Para las versiones anteriores del IE9 -->
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<header>
<h1>Contador de palabras</h1>
</header>
<section>
<article id="formarea">
<form name="frmpalabras">
<fieldset>
<label for="message">Mensaje:</label>
<textarea name="mensaje" id="message" placeholder="Ingrese un
mensaje"></textarea><br />
<label for="count">Conteo:</label>
<input type="text" name="conteo" id="count" readonly="readonly" value="0" />
</fieldset>
</form>
</article>
</section>
</body>
</html>
Guión 2: wordcount.js
function init(){
var textarea = document.getElementById("message");
var inputtext = document.getElementById("count");
if(textarea.addEventListener){
textarea.addEventListener("keyup", function(){
wordcount(this, document.frmpalabras.conteo);
}, false);
}
else if(textarea.attachEvent){
textarea.attachEvent("onkeyup", function(){
wordcount(this, document.frmpalabras.conteo);
});
}
if(inputtext.addEventListener){
inputtext.addEventListener("keyup", function(){
wordcount(document.frmpalabras.mensaje, this);
});
}
else if(inputtext.attachEvent){
inputtext.attachEvent("onkeyup", function(){
wordcount(document.frmpalabras.mensaje, this);
});
}
}
function wordcount(w,x){
var y = w.value;
var r = 0;
a = y.replace(/\s/g,' ');
a = a.split(' ');
for(z=0; z<a.length; z++){
if(a[z].length > 0) r++;
}
x.value = r;
}
if(window.addEventListener){
window.addEventListener("load", init, false);
}
else{
window.attachEvent("onload", init);
}
Guión 3: font.css
@font-face {
font-family: 'LeagueGothicRegular';
src: url('../fonts/League_Gothic.eot');
src: url('../fonts/League_Gothic.woff') format('woff'),
url('../fonts/League_Gothic.otf') format('opentype'),
url('../fonts/League_Gothic.svg#LeagueGothic') format('svg');
}
Guión 4: formstyle.css
* {
border: 0;
margin: 0;
outline: none;
padding: 0;
}
html {
height: 100%;
}
body {
background: #1e2021; /* Old browsers */
background: -moz-linear-gradient(-45deg, #1e2021 1%, #4a4e54 50%, #0c0309 100%); /*
FF3.6+ */
background: -webkit-gradient(linear, left top, right bottom, color-stop(1%,#1e2021),
color-stop(50%,#4a4e54), color-stop(100%,#0c0309)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(-45deg, #1e2021 1%,#4a4e54 50%,#0c0309 100%); /*
Chrome10+,Safari5.1+ */
background: -o-linear-gradient(-45deg, #1e2021 1%,#4a4e54 50%,#0c0309 100%); /* Opera
11.10+ */
background: -ms-linear-gradient(-45deg, #1e2021 1%,#4a4e54 50%,#0c0309 100%); /* IE10+
*/
h1 {
font-size: 48px;
color: #9ab;
text-transform: uppercase;
text-align: center;
margin: 16px auto;
text-shadow: 1px 1px 0 #CCC,
2px 2px 0 #CCC, /* end of 2 level deep grey shadow */
3px 3px 0 #444,
4px 4px 0 #444,
5px 5px 0 #444,
6px 6px 0 #444; /* end of 4 level deep dark shadow */
/* CSS3 Transform Effect */
-webkit-transform: scale(1.2); /* Safari & Chrome */
-moz-transform: scale(1.2); /* Firefox */
-o-transform: scale(1.2); /* Opera */
}
#formarea {
background: #c9d0de; border: 1px solid #e1e1e1;
-moz-box-shadow: 0px 0px 8px #444;
-webkit-box-shadow: 0px 0px 8px #444;
margin: 20px auto;
padding: 20px 10px;
width: 430px;
}
label {
float: left;
clear: left;
margin: 11px 20px 0 0;
width: 100px;
text-align: right;
font-size: 16px;
color: #445668;
text-transform: uppercase;
text-shadow: 0px 1px 0px #f2f2f2;
}
input {
width: 260px;
height: 35px;
padding: 5px 20px 0px 20px;
margin: 0 0 20px 0;
background: #546a7f; /* Old browsers */
background: -moz-linear-gradient(-45deg, #546a7f 0%, #5e768f 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#546a7f),
color-stop(100%,#5e768f)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(-45deg, #546a7f 0%,#5e768f 100%); /*
Chrome10+,Safari5.1+ */
background: -o-linear-gradient(-45deg, #546a7f 0%,#5e768f 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(-45deg, #546a7f 0%,#5e768f 100%); /* IE10+ */
background: linear-gradient(135deg, #546a7f 0%,#5e768f 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#546a7f',
endColorstr='#5e768f',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 0px 1px 0px #f2f2f2;
-webkit-box-shadow: 0px 1px 0px #f2f2f2;
font-family: sans-serif;
font-size: 16px;
color: #f2f2f2;
text-transform: uppercase;
text-shadow: 0px -1px 0px #334f71;
}
input::-webkit-input-placeholder {
color: #a1b2c3;
text-shadow: 0px -1px 0px #38506b;
}
input:-moz-placeholder {
color: #a1b2c3;
text-shadow: 0px -1px 0px #38506b;
}
textarea {
width: 260px; height: 170px; padding: 12px 20px 0px 20px; margin: 0 0 20px 0;
background: #546a7f; /* Old browsers */
background: -moz-linear-gradient(-45deg, #546a7f 0%, #5e768f 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#546a7f),
color-stop(100%,#5e768f)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(-45deg, #546a7f 0%,#5e768f 100%); /*
Chrome10+,Safari5.1+ */
background: -o-linear-gradient(-45deg, #546a7f 0%,#5e768f 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(-45deg, #546a7f 0%,#5e768f 100%); /* IE10+ */
background: linear-gradient(135deg, #546a7f 0%,#5e768f 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#546a7f',
endColorstr='#5e768f',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-moz-box-shadow: 0px 1px 0px #f2f2f2;
-webkit-box-shadow: 0px 1px 0px #f2f2f2;
font-family: sans-serif;
font-size: 16px;
color: #f2f2f2;
text-transform: uppercase;
text-shadow: 0px -1px 0px #334f71;
}
textarea::-webkit-input-placeholder {
color: #a1b2c3;
text-shadow: 0px -1px 0px #38506b;
}
textarea:-moz-placeholder {
color: #a1b2c3;
text-shadow: 0px -1px 0px #38506b;
}
input:focus,
textarea:focus {
background: #668099; /* Old browsers */
background: -moz-linear-gradient(-45deg, #668099 0%, #728eaa 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#668099),
color-stop(100%,#728eaa)); /* Chrome,Safari4+ */
Ejemplo #4: El siguiente ejemplo permite ingresar un deporte en una caja de texto y mientras ingresa el
nombre del deporte, si está presente en el cuadro de lista, comienza a mostrar las coincidencias filtrando en
el momento en el cuadro de lista. Adicionalmente se puede hacer doble clic en el cuadro de lista cuando
todavía no se ha terminado de escribir el nombre del deporte e inmediatamente llena el cuadro de texto
donde se estaba ingresando el nombre del deporte. Para esto se utilizan manejadores de evento en la caja
de texto con keyup y dblclick en el cuadro de lista.
Guión 1: busqueda.html
<!DOCTYPE html>
<html lang="es">
<head>
<title>Deportes olímpicos</title>
<meta charset="utf-8" />
<link rel='stylesheet'
href='http://fonts.googleapis.com/css?family=Montserrat:400,700'>
<link rel="stylesheet" href="css/formstyle.css" />
<script type="text/javascript" src="js/busqueda.js"></script>
</head>
<body>
<div class="box-wrap">
<form id="frmsearchsport" name="frmsearchsport">
<fieldset id="box-form">
<legend>¿Qué deportes olímpico te gusta más?</legend>
<label for="txtsport">Ingresa un deporte:</label>
<input type="text" id="txtsport" name="busca" size="24"><br/>
<label for="lstsports">Listado:</label>
<select name="lstsports" id="lstsports" size="24">
</select>
</fieldset>
</form>
</div>
</body>
</html>
Guión 2: búsqueda.js
//Definir la matriz o arreglo con los datos
var lista = new Array('Aerobic', 'Ajedrez', 'Atletismo', 'Balonmano', 'Béisbol',
'Badminton',
'Baloncesto', 'Boxeo', 'Ciclismo', 'Equitación', 'Esgrima',
'Footing',
'Fútbol', 'Gimnasia artística', 'Gimnasia rítmica', 'Judo',
'Lanzamiento de disco',
'Lanzamiento de jabalina', 'Levantamiento de pesas', 'Lucha',
'Natación',
'Natación sincronizada', 'Patinaje', 'Pentatlón', 'Remo', 'Salto
alto',
'Salto largo', 'Tenis', 'Tenis de mesa', 'Tiro con arco',
'Voleibol', 'Waterpolo'
);
function iniciar(){
//Creando el controlador de evento para el evento
//doble clic sobre los elementos del cuadro de lista
var lista = document.getElementById("lstsports");
//Cargando los datos en el cuadro de lista al cargar la página
cargarLista();
if(lista.addEventListener){
lista.addEventListener("dblclick", function(){
cargarTexto(this.options[this.selectedIndex].text);
}, false);
}
else if(lista.attachEvent){
lista.attachEvent("ondblclick", function(){
cargarTexto(this.options[this.selectedIndex].text);
});
}
//Capturando el campo de texto sobre el que se ingresan los deportes
//mediante pulsasión de tecla
var texto = document.getElementById("txtsport");
if(texto.addEventListener){
texto.addEventListener("keyup", buscar, false);
}
else if(texto.attachEvent){
texto.attachEvent("onkeyup", buscar);
}
}
function cargarLista() {
// Cargamos el combo
for(x=0;x<lista.length;x++)
document.frmsearchsport.lstsports[x] = new Option(lista[x]);
}
function cargarTexto(elemento){
if(elemento!=null && elemento!=undefined && elemento!="")
document.frmsearchsport.txtsport.value = elemento;
}
function buscar() {
limpiarLista();
// Se obtiene el valor del texto
var str = document.frmsearchsport.txtsport.value;
function limpiarLista() {
for(x=document.frmsearchsport.lstsports.length;x>=0;x--)
document.frmsearchsport.lstsports[x] = null;
}
}
else if(window.attachEvent){
window.attachEvent("onload", iniciar);
}
Guión 3: formstyle.css
* {
margin: 0;
padding: 0;
}
body {
background:url(../img/bg-body.png);
font-family: 'Montserrat', sans-serif;
font-size: 16px;
height: 100%;
}
.box-wrap {
margin: 20px;
min-height: 460px;
position: relative;
}
fieldset {
background: url(../img/bg-form.png);
margin: 0 auto;
padding: 12px 16px;
height: auto;
width: 40%;
}
legend {
background: rgba(98,125,77,1);
background: -moz-linear-gradient(left, rgba(98,125,77,1) 0%, rgba(31,59,8,1) 100%);
background: -webkit-gradient(left top, right top, color-stop(0%, rgba(98,125,77,1)),
color-stop(100%, rgba(31,59,8,1)));
background: -webkit-linear-gradient(left, rgba(98,125,77,1) 0%, rgba(31,59,8,1) 100%);
background: -o-linear-gradient(left, rgba(98,125,77,1) 0%, rgba(31,59,8,1) 100%);
background: -ms-linear-gradient(left, rgba(98,125,77,1) 0%, rgba(31,59,8,1) 100%);
background: linear-gradient(to right, rgba(98,125,77,1) 0%, rgba(31,59,8,1) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#627d4d',
endColorstr='#1f3b08', GradientType=1 );
-webkit-border-radius: 16px;
-moz-border-radius: 16px;
-o-border-radius: 16px;
-ms-border-radius: 16px;
border-radius: 16px;
color: #fcecfc;
padding: 12px 8px;
}
label {
color: #222;
float: left;
font-size: 1em;
font-weight: bold;
margin: 6px;
text-shadow: 0px 2px 3px #555;
width: 180px;
}
input[type='text'] {
background-color: #F5F5F8;
border: 1px solid #C9CAD1;
-webkit-border-radius: 3px 3px 3px 3px;
-moz-border-radius: 3px 3px 3px 3px;
-o-border-radius: 3px 3px 3px 3px;
-ms-border-radius: 3px 3px 3px 3px;
border-radius: 3px 3px 3px 3px;
color: #333;
font-size: 1.2em;
height: 28px;
margin: 13px 0;
padding: 12px;
width: 96%;
}
select {
border: 1px solid #c9cad1;
-webkit-border-radius: 3px 3px 3px 3px;
border-radius: 3px 3px 3px 3px;
margin: 11px 0px;
color:#333;
font-family:Arial, Helvetica, sans-serif;
font-size: 1.2em;
-webkit-appearance: none;
background:#f5f5f8 url(../img/downarrow.png) no-repeat 328px 19px;
padding:12px;
width:96%;
}
Ejemplo #5: El siguiente ejemplo permite encontrar dentro de un documento todos los elementos que
existen que son de una clase seleccionada mediante un campo select de formulario. Cuando ha ingresado
en un elemento de tipo texto el nombre del elemento en el que desea buscar o indicando que buscará en
todos los elementos por la clase. Se utiliza una expresión regular, en este caso con el constructor new
RegExp() por el hecho de que el patrón de expresión regular se determina hasta que el usuario da clic en el
botón encontrar del formulario; es decir, la expresión regular no es fija.
Guión 1: testpage.html
<!DOCTYPE html>
<html lang="es">
<head>
<title></title>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/modernform.css" />
<script type="text/javascript" src="js/findclass.js"></script>
</head>
<body>
<section>
<article>
<div class="samurai ninja">
</div>
<div class="ninja samurai">
</div>
<div></div>
<span class="samurai ninja viking"></span><br />
<div class="container">
<section class="tabblue">
<ul class="tabs blue">
<li>
<input type="radio" name="tabs blue" id="tab1" checked="">
<label for="tab1">Recuento de clases</label>
Guión 2: findclass.js
function iniciar(){
var classname, tag="";
var btnfind = document.getElementById("btnSend");
if(btnfind.addEventListener){
btnfind.addEventListener("click", function(){
//Es de suponer que el valor del campo de texto y del campo select del
formulario
//estará establecido cuando se haga clic sobre el botón Encontrar
classname = document.frmclass.txtname.value;
tag =
document.frmclass.selelement[document.frmclass.selelement.selectedIndex].value;
alert("Se han encontrado " + findClassInElements(classname, tag) + " elementos
" + tag.toString() + " con la clase " + classname);
}, false);
}
else if(btnfind.attachEvent){
btnfind.attachEvent("onclick", function(){
//Es de suponer que el valor del campo de texto y del campo select del
formulario
//estará establecido cuando se haga clic sobre el botón Encontrar
classname = document.frmclass.txtname.value;
tag =
document.frmclass.selelement[document.frmclass.selelement.selectedIndex].value;
alert("Se han encontrado " + findClassInElements(classname, tag) + " elementos
" + tag.toString() + " con la clase " + classname);
});
}
}
Guión 3: modernform.css
@import url(http://fonts.googleapis.com/css?family=Lato:300,400,700);
@import url(http://fonts.googleapis.com/css?family=Roboto:100);
@import url(http://fonts.googleapis.com/css?family=Raleway:100,200,300);
@import url(http://fonts.googleapis.com/css?family=Montserrat:400,700);
* {
margin: 0;
padding: 0;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
body {
background: #FFFFFF;
color: #fff;
font-family: 'Lato',Arial,sans-serif;
text-align: left;
}
header {
border-bottom: 1px solid #EDEFF0;
color: #009EE0;
font-family: 'Lato',Arial,sans-serif;
height: 100px;
line-height: 100px;
margin: 0 auto;
max-width: 100%;
position: relative;
text-align: center;
h1 {
color:#2d2b2c;
font-size: 2.625em;
font-weight: 300;
line-height: 1.3;
line-height:100px;
margin: 0;
}
small {
bottom: 25px;
color: #EF0C72;
font-size: 18px;
font-weight: bold;
position: relative;
}
.container {
float: left;
height: 481px;
padding: 20px 0;
width: 100%;
}
section {
position: relative;
height: 442px;
margin-left: 50%;
left: -197px;
width: 394px;
}
@font-face {
font-family: 'FontAwesome';
src: url('../fonts/fontawesome-webfont.eot?v=4.0.3');
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),
url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),
url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),
url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
cursor:pointer;
}
.fa:hover{
-moz-transform:scale(1.2); /* Firefox */
-ms-transform:scale(1.2); /* IE 9 */
-o-transform:scale(1.2); /* Opera */
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.fa-user:before {
content: "\f13b";
}
.fa-envelope:before {
content: "\f007";
}
.fa-lock:before {
content: "\f113";
}
.fa-facebook:before {
content: "\f02e";
}
.fa-twitter:before {
content: "\f099";
}
.fa-degree:before {
content: "\f13c";
}
.tabs h1 {
font-size: 32px;
font-family: 'Roboto';
margin-bottom:15px;
}
.tabs p {
font-size: 14px;
line-height: 20px;
margin-bottom: 8px;
}
.tabs.blue li {
float: right;
display: block;
}
.tabs.blue input[type="radio"] {
left: -9999px;
position: absolute;
top: -9999px;
}
.tabs.blue label {
display: block;
padding: 14px 31px;
font-size: 16px;
font-weight: normal;
cursor: pointer;
position: relative;
top: 5px;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
-webkit-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
.tabs.blue .tab-content {
z-index: 2;
display: none;
overflow: hidden;
width: 100%;
font-size: 17px;
line-height: 25px;
padding: 15px;
position: absolute;
top: 53px;
left: 0;
}
.tabblue .fa:hover{
color:#009EE0;
}
.tabblue .tabaddon {
color: #16B3F5;
}
/* TAB Form */
.tabs input[type="text"],
.tabs input[type="number"],
.tabs input[type="date"],
.tabs input[type="password"],
.tabs input[type="email"],
.tabs select {
border: medium none;
color: #757575;
height: 40px;
line-height: 40px;
margin-bottom: 10px;
padding: 10px;
width: 89%;
}
.tabs select.last {
margin-right:0px;
}
.tabs .btn {
float: left;
margin-top: 15px;
width: 100%;
}
.tabs input[type="button"]{
display:block;
float:right;
cursor:pointer;
border-top: 2px solid #a3ceda;
border-left: 2px solid #a3ceda;
border-right: 2px solid #4f6267;
border-bottom: 2px solid #4f6267;
padding: 10px 20px !important;
font-size: 14px !important;
background-color: #c4f1fe;
font-weight: bold;
color: #2d525d;
text-decoration:none;
}
.tabs input[type="button"]:hover{
-webkit-transition: 0.5s;
-moz-transition: 0.5s;
-o-transition: 0.5s;
-ms-transition: 0.5s;
transition: 0.5s;
}
.tabs h4{
font-style:italic;
text-align:center;
margin-bottom:10px;
font-weight:normal;
}
.tabaddon {
background: none repeat scroll 0 0 #FFFFFF;
border-right: 1px solid #ebebeb;
float: left;
height: 40px;
text-align: center;
width: 40px;
}
.tabs .social {
float:left;
margin-bottom:10px;
width:100%;
}
.tabs .social a {
color:#FFF;
float:left;
font-size:14px;
padding: 10px 65px 10px 30px;
text-decoration:none;
}
V. DISCUSION DE RESULTADOS
1. Realice un validador de expresiones regulares para los siguientes casos: a) direcciones IPv4 (tome en
cuenta que las direcciones IP llegan como máximo hasta 255.255.255.255), b) direcciones web (URLs)
tomando en cuenta protocolos como http, https y ftp y que las direcciones como
//html5shiv.googlecode.com/svn/trunk/html5.js también son válidas, y c) direcciones de correo
electrónico. La implementación debe ser exactamente igual que el problema número 1 en el que se
selecciona el tipo de validación que queremos y un campo de texto a la par donde se ingresa esa
dirección.
Haga que aparezca el mensaje de alerta apropiado si la URL o la dirección IP es válida o no.
2. Siguiendo el ejemplo del ejercicio 3, cree un script que le permita buscar palabras de un diccionario para
mostrar su definición en un área de texto. La definición deberá cargarse en el área de texto al hacer doble
clic sobre la palabra deseada en el cuadro de lista o al hacer clic en un botón denominado mostrar
definición. Como el cuadro de lista contendrá muchas palabras deberá utilizar un cuadro de texto para
filtrar las palabras a medida se vaya escribiendo en el cuadro de texto. Puede utilizar una interfaz como la
que se muestra a continuación. Como mínimo deberá presentar unas 80 palabras con sus definiciones.
Utilice palabras con la mayor parte de letras del alfabeto español.
VI. BIBLIOGRAFIA
Powell, Thomas / Schneider, Fritz. JavaScript Manual de Referencia. 1ra Edición. Editorial McGraw-Hill.
2002. Madrid, España.
Flanagan, David. JavaScript La Guía Definitiva. 1ra Edición. Editorial ANAYA Multimedia. 2007. Madrid,
España.
McFedries, Paul. JavaScript Edición Especial. 1ra Edición. Editorial Prentice Hall. 2002. Madrid, España.
López Quijado, José. Domine JavaScript. 2da Edición. Editorial Alfaomega RAMA. Mayo 2007. México
D.F.
http://developer.mozilla.org/es/docs/Gu%C3%ADa_JavaScript_1.5:Expresiones_Regulares.