Colección de funciones de validación de formularios con Javascript
1 Comentario · Publicado por E·Marine el día 7/jun/11 en extJS, Javascript
Adjunto unas cuantas funciones javascript que ayudaran a mas de uno a validar sus formularios. Son las tipicas funciones que se usan en todos los proyectos y que tan molestas son de implementar. Todos nosotros hemos buscado una y otra vez estas funciones, las hemos traducido de C a Java, a PHP, de PHP a Javascript, etc etc. y cada una de esas veces nos hemos preguntado: ¿En serio que nadie ha posteado unas funciones de validación que funcionen del todo?
Pues bien, quiero reunir un pequeño listado de funciones que seguro le son utiles a mas de uno.
**Todas las funciones expuestas en este post devuelven true en el caso de que el valor pasado como parametro cumpla con la validación false en caso contrario
Validación NIF español
function validaNif(nif) {
if (!nif) return false;
var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
if (nif.length != 9) return false;
else {
letra = nif.substr(8, 1); letra = letra.toUpperCase();
dni = nif.substr(0, 8);
dni = dni.toUpperCase(); dni = dni.replace('X','0');
dni -= parseInt(dni/23) * 23;
if (letras.charAt(dni) != letra) return false;
else return true;
}
}
Validación numero Seguridad Social española
function validaSS(nss,field) {
if (!nss) return false;
if (nss.length != 11 && nss.length != 12) return false;
if (nss.substr(2, 1) == 0) nss = "" + nss.substr(0, 2) + nss.substr(3, nss.length-1);
if (mod(nss.substr(0, nss.length-2), 97) == nss.substr(nss.length-2, 2)) return true;
else return false;
}
Validación numero Cuenta corriente
function validaCCC(val){
var banco = val.substring(0,4);
var sucursal = val.substring(4,8);
var dc = val.substring(8,10);
var cuenta=val.substring(10,20);
var CCC = banco+sucursal+dc+cuenta;
if (!/^[0-9]{20}$/.test(banco+sucursal+dc+cuenta)){
bancoField.addClass('x-form-invalid');
sucursalField.addClass('x-form-invalid');
dcField.addClass('x-form-invalid');
return false;
}
else
{
valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
control = 0;
for (i=0; i<=9; i++)
control += parseInt(cuenta.charAt(i)) * valores[i];
control = 11 - (control % 11);
if (control == 11) control = 0;
else if (control == 10) control = 1;
if(control!=parseInt(dc.charAt(1))) {
bancoField.addClass('x-form-invalid');
sucursalField.addClass('x-form-invalid');
dcField.addClass('x-form-invalid');
return false;
}
control=0;
var zbs="00"+banco+sucursal;
for (i=0; i<=9; i++)
control += parseInt(zbs.charAt(i)) * valores[i];
control = 11 - (control % 11);
if (control == 11) control = 0;
else if (control == 10) control = 1;
if(control!=parseInt(dc.charAt(0))) {
bancoField.addClass('x-form-invalid');
sucursalField.addClass('x-form-invalid');
dcField.addClass('x-form-invalid');
return false;
}
return true;
}
}
Hasta aquí las validaciones de forma separada. Éstas funciones las he usado en distintos desarrollos, de todas formas, y como buen desarrollador digo: Si encontrais algun error no dudéis en comentarlo!!
Validacion para extJS
Para los usuarios de extJS (también conocido como sencha), el mejor Framework que conozco, añado el codigo necesario para que, a todos los inputs, ponáis un vType definido en el codigo, y os valide ibnmediatamente el texto segun las reglas aquí descritas
Si es un tema solicitado, publicaré un amplio tutorial en uso de extJS (o sencha), framework del que, a día de hoy, me puedo considerar un usuario avanzado
Ext.apply(Ext.form.VTypes, {
phoneNumber : function(val,field){
return /^[0-9]{9}$/.test(val);
},
phoneNumberText:'El numero de telefono es incorrecto',
/*VALIDACION PARA NORMATIVA ESPANYOLA (NNNNN)*/
CP : function(val,field){
return /^[0-9]{5}$/.test(val);
},
CPText:'El codigo postal introducido es incorrecto',
CIF : function (cf,field){
var i = temp = 0;
var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
cf = cf.toUpperCase();
if (!/^[A-Za-z0-9]{9}$/.test(cf)) return false;
else if (!/^[ABCDEFGHKLMNPQS]/.test(cf)) return false;
else{
for(i=2; i<=6; i+=2){
temp += v1[parseInt(cf.substr(i-1, 1))];
temp += parseInt(cf.substr(i, 1));
}
temp = temp + v1[parseInt(cf.substr(7,1))];
temp = (10 - ( temp % 10));
if(temp == 10 && (cf.charAt(cf.length-1) == 'J' || cf.charAt(cf.length-1) == 0)) return true;
else if (cf.charAt(cf.length-1) == temp || cf.charAt(cf.length-1) == String.fromCharCode(64 + temp)) return true;
else return false;
}
},
CIFText:'El CIF introducido es incorrecto',
NIF:function (nif,field) {
if (!nif) return false;
var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
if (nif.length != 9) return false;
else {
letra = nif.substr(8, 1); letra = letra.toUpperCase();
dni = nif.substr(0, 8);
dni = dni.toUpperCase(); dni = dni.replace('X','0');
dni -= parseInt(dni/23) * 23;
if (letras.charAt(dni) != letra) return false;
else return true;
}
},
NIFText:'El NIF introducido es incorrecto',
NSS : function(nss,field) {
if (!nss) return false;
if (nss.length != 11 && nss.length != 12) return false;
if (nss.substr(2, 1) == 0) nss = "" + nss.substr(0, 2) + nss.substr(3, nss.length-1);
if (mod(nss.substr(0, nss.length-2), 97) == nss.substr(nss.length-2, 2)) return true;
else return false;
},
NSSText:'El numero de Seguridad Social introducido no es valido',
/*COMENTARIO PARA PIXELIZAR.COM:
*
* Para que funcione correctamente debemos tener un compositeField que englobe los distintos inputs que forman
* el 'input' de cuenta corriente. Mediante varios inputs se puede hacer mucho mas usable la introducción del campo
* cuenta corriente en un formulario extJS
*
*/
CCC:function(val,field){
var compositeField = Ext.getCmp(field.compositeFieldId);
var sufix='';
if(field.sufix)sufix=field.sufix;
var fieldList=compositeField.items;
var bancoField = fieldList.get('Banco'+sufix);
var sucursalField = fieldList.get('Sucursal'+sufix);
var dcField = fieldList.get('DC'+sufix);
var cuentaField = fieldList.get('Cuenta'+sufix);
var CCC = fieldList.get('CCC'+sufix);
var banco = bancoField.getValue();
var sucursal = sucursalField.getValue();
var dc = dcField.getValue();
var cuenta=cuentaField.getValue();
if (!/^[0-9]{20}$/.test(banco+sucursal+dc+cuenta)){
bancoField.addClass('x-form-invalid');
sucursalField.addClass('x-form-invalid');
dcField.addClass('x-form-invalid');
return false;
}
else
{
valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
control = 0;
for (i=0; i<=9; i++)
control += parseInt(cuenta.charAt(i)) * valores[i];
control = 11 - (control % 11);
if (control == 11) control = 0;
else if (control == 10) control = 1;
if(control!=parseInt(dc.charAt(1))) {
bancoField.addClass('x-form-invalid');
sucursalField.addClass('x-form-invalid');
dcField.addClass('x-form-invalid');
return false;
}
control=0;
var zbs="00"+banco+sucursal;
for (i=0; i<=9; i++)
control += parseInt(zbs.charAt(i)) * valores[i];
control = 11 - (control % 11);
if (control == 11) control = 0;
else if (control == 10) control = 1;
if(control!=parseInt(dc.charAt(0))) {
bancoField.addClass('x-form-invalid');
sucursalField.addClass('x-form-invalid');
dcField.addClass('x-form-invalid');
return false;
}
bancoField.removeClass('x-form-invalid');
sucursalField.removeClass('x-form-invalid');
dcField.removeClass('x-form-invalid');
CCC.setValue(banco+sucursal+dc+cuenta);
return true;
}
},
CCCText:'El numero Numero de cuenta corriente introducido es incorrecto',
copyValidationText:'Los dos campos no coinciden',
/*VALIDACION AVANZADA: COMPROBACIÓN DE QUE DOS CAMPOS SON COINCIDENTES
* El campo que contiene el VType debe contener, también un atributo 'initialField' con el que comparar valores.
*/
copyValidation : function(val, field) {
if (field.initialField) {
var initialField = Ext.getCmp(field.initialField);
return (val == initialField.getValue());
}
if(field.textField) copyValidationText=field.textField;
return true;
}
});
Por poco que sea, espero que os sea de ayuda. En mi caso, me hubiera ayudado mucho tener un recopilatorio de validaciones Javascript, y más con el último código mostrado. Código sudado en su momento.
Etiquetas: Avanzados · validacion · validacion extjs · validacion formulario · validacion javascript



tutoriales en español · 1 febrero, 2012 a las 1:09
Amigo justo lo que estaba buscando
Saludos.