Metaprogramación
============================
& lttitle & gt terry. Validador de validación de formulario
& ltstyle & gt
cuerpo, TD { font:normal 12px Verdana color: #333333}
entrada, área de texto, selección, TD { fuente: normal 12px Verdana; color: #333333; borde: 1px sólido #999999; fondo: #ffffff}
tabla { border-collapse:collapse;}
td{ padding :3px}
Entrada {height:20;}
textarea {width:80%; height:50pxoverfmin:auto;}
Formulario {display: inline }
& lt/style & gt;
& lttable align="center " >
& ltform nombre = " el formulario " id = " demostración " action = " " método = " get " onSubmit = " return Validador.
Validar(esto, 2)" & gt;
& lttr & gt
& lttd & gtNombre real:& lt/TD & gt;
& lt /tr & gt;
& lttr & gt
& lttd & gt Nombre en inglés: & lt/TD & gt;
& lt/tr & gt ;
& lttr & gt
& lttd & gtPágina de inicio:
& lt/tr & gt;
& lttr & gt
& lttd & gtContraseña:
& lt/tr & gt;
& lttr & gt
& lttd & gtDuplicar:
& lt/tr & gt;
& lttr & gt
& lttd & gtE-mail: & lt/TD & gt;
& lt/tr & gt;
& lttr & gt
& lttd & gtCorreo electrónico: & lt/TD & gt;
& lt /tr & gt;
& lttr & gt
& lttd & gtQQ:& lt;/TD & gt;& lttd & gt& ltinput name = " QQ " require = " false " tipo de datos = " QQ " msg = " El número QQ no existe " > & lt/TD & gt
& lt/tr & gt;
& lttd & gtDNI: & lt/TD & gt;
& lt/tr & gt;
& lttr & gt
<td>age:
</tr>
<tr>
<td>age1:</TD & gt;
& lt/tr & gt;
& lttr & gt
& lttd & gtTeléfono:& lt/TD & gt;
p>& lt/tr & gt;
& lttr & gt
& lttd & gtTeléfono móvil:& lt/TD & gt;
& lt/tr & gt;
& lttr & gt
& lttd & gtCumpleaños: & lt/TD & gt;
& lt/tr & gt;
& lttr & gt
& lttd & gtCódigo postal:& lt/TD & gt;
& lt/tr & gt;
p>& lttr & gt
& lttd & gtCódigo postal:& lt/TD & gt;
& lt/tr & gt;
& lttr & gt
& lttd & gtSistema operativo:& ltOpción value = " " & gtSeleccione su sistema operativo
& lt/tr & gt;
& lttr & gt
& lttd & gtUbicación: Beijing
& lt/tr & gt;
& lttr & gt
& lttd & gtAficiones:
& lt/tr & gt; p>
& lttd & gtAutopresentación: el chino es una palabra
& lt/tr>
p>
& lttd & gtAutobiografía: el chino son dos bytes t
& lt/tr & gt;
& lttr & gt
& lttd colspan ="2 " >& ltInput nombre = " enviar " tipo = " enviar " valor = " confirmar envío " > & lt;inputonclick = " validador . validar(documento . getelementbyid(' demo ')" valor = " modo de inspección 1 " type = " botón " >& ltInputonclick = "validator.validator(documentation.getelementbyid('demo'), 2)" value = "modo de prueba 2" tipo = " botón ">& ltInputonclick = "validator .validate(documentation.getelementbyid ('demo'), 3)" valor = "Modo de prueba 3" tipo = "botón"></TD>
</tr>
</form>
</table>
<script>
validador = {
Solicitud: +/,
Correo electrónico:/. ^\w+([-+.]\w+)*@\w+([-.]\w+)* \.\w+([-.]\w+)*$/,
Teléfono: /^((\(\d{3}\))|(\d{3}\-)? (\(0\d{2,3}\)|0\d{2,3}-)? [1-9]\d{6,7}$/,
Teléfono móvil:/ ^((\(\d{3}\))|(\d{3}\-)? 13 { 9 } $/,
URL:/^pare(value,getattribute('operator '),getattribute('to'))",
Personalizado: "Esto. Exec(valor, getAttribute('regexp ')",
Grupo: "This. MustChecked() getAttribute('nombre '), getAttribute('min '), getAttribute('max ')",
ErrorItem: [document.forms[0]],
Mensaje de error: ["El envío falló por los siguientes motivos:\t\t\t"],
Verificación: función (formulario, modo) {
var obj = el evento srcelement;
var count = obj length;
< | p>Esto. mensaje de error .length = 1;Esto. elemento de error .length = 1;
Esto.
Elemento de error[0]=obj;
for(var I = 0;i<count;i++){
with(obj.elements[i]){ p>
var _ tipodatos = get atributo("tipodatos ");
if(tipo de(_tipodatos)= = " objeto " | | tipo de(este[_tipodatos])= = " indefinido ") continuar;
Esto. ClearState(obj . elementos[I]);
if(obtener atributo(" require ")== " false " & &value == " ")Continuar;
switch( _datatype){
Caso "Fecha":
Caso "Duplicado":
Caso "Rango":
Caso "Comparar" :
Caso "Personalizado":
Caso "Grupo":
Caso "Restricciones":
Caso "LimitB":
Caso "cadena segura":
if (!eval(this[_ dataType]){
this.AddError(i, getAttribute(" msg ") );
}
Romper;
Valor predeterminado:
if (!this[_datatype ].test(value)){
This.AddError(i, getAttribute("msg"));
}
Rotura;
}
}
}
if (este. mensaje de error. longitud & gt1){
modo = modo 1;
< | p>var errCount = this. Error item.length;Cambiar (modo) {
Caso 2:
for (var I = 1; i<erCounti++)
Este. error item[I]. style. color = "red";
Caso 1:
alert(this.error message.join(" \n");
this.errorItem[1].focus();
break;
Caso 3:
para (var I = 1; I & llterCounti++){
Pruebe {
var SPAN = document . createelement(" SPAN "); " _ _ panel de mensajes de error ";
span style . color = " red ";
este. >span.innerHTML = esto. Mensaje de error[i]. reemplazar(/\d+:/, " * ");
}
catch(e){ alerta(e . descripción);}
}
Esto. Elemento de error[1]. focus();
Break;
Valor predeterminado:
Alerta(this.
mensaje de error .join(" \ n ");
Romper;
}
Devuelve falso
}
Devuelve verdadero
},
Límite: función (longitud, valor mínimo, valor máximo){
min = min 0;
máx = máximo || Número. MAX _ VALUE
Devuelve el valor mínimo& ltlen & amp& amplen & lt= max
},
LenB: función (cadena){
Return str.replace(/[^\x00-\xff]/g,"**").length;
},
ClearState: función (elem) {
Con (elem){
if(style.color == "rojo")
style.color =
var lastNode = nodo principal . nodos secundarios[nodo principal . nodos secundarios . longitud-1];
if(lastnode . id == " _ _ panel de mensajes de error ")
nodo principal. eliminar child(lastNode);
}
},
AddError: función (index, str) {
This. ErrorItem[este. ErrorItem.length] = esto. Elemento de error[0]. elemento[índice];
Esto. Mensaje de error [este. ErrorMessage.length] = esto. mensaje de error . length+":"+str;
},
Exec: function(op, reg){
Devuelve nueva RegExp(reg," g ").
prueba(op);
},
Comparar: función(op1, operador, op2) {
interruptor(operador){
Caso "No igual":
return (op1!= op2);
Caso "MayorThan":
return(op 1 & gt; op2) ;
Caso "MayorThanEqual":
return(op 1 & gt; = op2);
Caso "menos que":
return(op 1 & lt; op2);
Caso "menor o igual a":
return(op 1 & lt; = op2); p> Valor predeterminado:
return(op 1 == op2);
}
},
MustChecked: función(nombre , min , max){
var grupos = documento . getelementsbyname(nombre);
var ha comprobado = 0;
min = min |
p>
max = max | grupos.longitud
for(var I = grupos . longitud-1;i>=0;i-)
if(grupo [i].checked)ha marcado++;
Devuelve el valor mínimo& lt= hasChecked & amp& amphasChecked & lt= max
},
IsDate: función( op, formatString){
cadena de formato = cadena de formato " ymd ";
var m, año, mes, día;
cambiar (formato de cadena de caracteres){
Case "ymd":
m = op.match(new regexp("^((\\d{4})|(\ \d{2} ))([-./])(\\d{1,2})\\4(\\d{1,2})$ ");
if( m == null) Devuelve falso
día = m[6];
mes = m[5]-;
año = (m[2] 4)? m[2] : GetFullYear(parseInt(m[3], 10));
Break
Caso "dmy":
m = op. partido (nueva expresión regular ("^(\\d{1,2})([-./])(\\d{1,2 })\ \ 2((\ \ d { 4 })|(\ \ d { 2 })$ ");
si(m == null) devuelve falso
día = m[1];
mes = m[ 3]-;
Año = (m[5]).
longitud == 4)? m[5] : GetFullYear(parseInt(m[6], 10));
Descanso
Valor predeterminado:
Descanso
}
Si (!parseInt(mes)) devuelve falso
mes=mes==12?0:mes;
var fecha =nuevo Fecha (año, mes, día);
return(type of(date)== " object " &&year == fecha . obtener año completo()&&month== fecha .getmonth() &&day == fecha .getdate());
función obtener año completo(y){ return((y <30 ?" 20 ":" 19 ") +y)|
}
}
& lt/script & gt;