使用JAVASCRIPT进行数据完整性验证
页面输入完整性是编写BS经常遇到的问题,如果那里需要就到那里写,那可是要花不少的时候,并且造成不必要的浪费,下面是一个通过校验脚本,使用非常方便,通过传入FORM名就可以进行校验,通过在页面控件中增加用户本身自定义属性,进行方便的验证,包括数字的输入、密码的输入、EMAIL的输入,用户本身可以进行无限的扩展,使用如下,在页面中加入如下代码:
- <form name="form1">
- <input type="text" name="t1" req="0" size="20"><br>
- <input type="text" name="t2" req="0" size="20"><br>
- <input type="text" name="t3" req="0" size="20"><br>
- <input type="text" name="t4" req="1" size="20"><br>
- <input type="text" name="t5" req="1" customtype="email" displayname="电子邮件" size="20"><br>
- <input type="button" name="bt" value="check" onclick="checkForm(document.form1)">
- </form>
并在页头加以包含以下代码的JS脚本:
- var customtypes = new Array("num","plus","int","email","link","password","name","date","money","date8");
- var custommessage = new Array(
- "不是一个有效的数字。",
- "不是一个有效的正整数。",
- "不是一个有效的整数。",
- "不是一个有效的电子邮件地址。",
- "不是一个有效的链接,请确认输入了完整的地址,例如http://www.cnlist.com。",
- "不是一个有效的密码,密码只能使用字母、下划线与数字,不能包含符号与空格。",
- "不是一个有效的名称,名称只能使用字母、下划线与数字,不能包含符号与空格。",
- "不是一个有效的日期。",
- "不是一个有效的money格式。",
- "不是一个有效的8位日期,如:20050801。"
- );
- function checkForm(oForm){
- window.event.returnValue = false;
- for (var i=0;i<oForm.all.tags("input").length;i++){
- var ele = oForm.all.tags("input")[i];
- var ct = ele.getAttribute("customtype");
- var req = ele.getAttribute("req");
- var dn = ele.getAttribute("displayname");
- if (null == dn){
- dn = ele.name;
- }
- dn = "“" + dn + "”";
- if(ele.value!=null){
- ele.value = ele.value.replace(/%/g, "%");
- }
- var nr = new String(ele.value);
- if ("1" == req){
- if (nr.length < 1){
- alert(dn + "不可以省略,请重新输入。");
- //ele.focus();
- focusIt(ele);
- return false;
- }
- }
- if((''==req || '0' ==req || null==req) && (ele.value == "")) continue;//不必要且没有输入时,下一个
- if ((("" == req)||(null == ct)) &&(ele.value == "")) continue;
- //检查自定义类型
- //纠正自定义类型在req不等于1时仍要求输入的bug
- if (("1" == req) || (nr.length > 0)) {
- for (var j=0;j<customtypes.length;j++){
- if (ct == customtypes[j]){
- if(ct=="money"){
- eval("var rtn = check_" + customtypes[j] + "(ele);");
- }else{
- eval("var rtn = check_" + customtypes[j] + "(ele.value);");
- }
- if (!rtn){
- alert(dn + custommessage[j]);
- //ele.focus();
- focusIt(ele);
- return false;
- }
- }
- }
- }
- }
- window.event.returnValue = true;
- return true;
- }
- function check_money(s) {
- s.value=s.value.replace(/,/g, "")
- var re = /^(/+|-)?/d+(./d+)?$/i;
- return re.test(s.value);
- }
- function check_email(s){
- var re = /^/w+@(/w)+((.(/w)+)+)?$/i;
- return re.test(s);
- }
- function check_num(s){
- var re = /^(/+|-)?/d+(./d+)?$/i;
- return re.test(s);
- }
- function check_int(s){
- var re = /^(/+|-)?/d+$/i;
- return re.test(s);
- }
- function check_plus(s) {
- var re = /^[1-9]/d*$/i
- return re.test(s);
- }
- function check_link(s){
- var re = /^(http|mailto|ftp|https|telnet)://{2}/i;
- return re.test(s);
- }
- function check_password(s){
- var re = /^/w+$/i;
- return re.test(s);
- }
- function check_name(s){
- return check_password(s);
- }
- function check_date8(DateString){
- return isDateEight(DateString);
- }
- //日期检测
- function check_date(DateString){
- if (DateString==null) return false;
- if (Dilimeter=='' || Dilimeter==null)
- var Dilimeter = '-';
- if (Dilimeter.indexOf("/")>0)
- {
- Dilimeter="/";
- }
- var tempy='';
- var tempm='';
- var tempd='';
- var tempH="";
- var tempM="";
- var tempS="";
- var tempymd="";
- var temphms="";
- var tempArray;
- if (DateString.length<8 && DateString.length>19) {
- return false;
- }
- if (DateString.indexOf(" ")>0)
- {
- temp=DateString.split(" ");
- tempymd=temp[0];
- temphms=temp[1];
- }
- else
- {
- tempymd=DateString;
- temphms="00:00:00";
- }
- tempArray = tempymd.split(Dilimeter);
- if (tempArray.length!=3) {
- return false;
- }
- if (tempArray[0].length==4)
- {
- tempy = tempArray[0];
- tempd = tempArray[2];
- tempm = tempArray[1];
- }
- else
- {
- tempy = tempArray[2];
- tempd = tempArray[1];
- tempm = tempArray[0];
- }
- tempArray = temphms.split(":");
- if (tempArray.length>3 || tempArray.length<2) {
- return false;
- }
- switch (tempArray.length) {
- case 2:
- tempH=tempArray[0];
- tempM=tempArray[1];
- tempS="00";
- break;
- case 3:
- tempH=tempArray[0];
- tempM=tempArray[1];
- tempS=tempArray[2];
- break;
- }
- var tDateString = tempy + '/'+tempm + '/'+tempd+' '+tempH+":"+tempM+":"+tempS;
- var tempDate = new Date(tDateString);
- if (isNaN(tempDate)) {
- return false;
- }
- if ((tempDate.getYear().toString()==tempy || tempDate.getYear()==parseInt(tempy,10)-1900)
- && (tempDate.getMonth()==parseInt(tempm,10)-1)
- && (tempDate.getDate()==parseInt(tempd,10))
- && (tempDate.getHours().toString()==parseInt(tempH,10))
- && (tempDate.getMinutes().toString()==parseInt(tempM,10))
- && (tempDate.getSeconds().toString()==parseInt(tempS,10)))
- {
- return true;
- }
- else
- {
- alert('tDateString='+tDateString);
- return false;
- }
- }
- //激活输入组件的焦点
- function focusIt(obj){
- try{
- var ele = mtb;
- }catch(e){
- try{
- obj.focus();
- return;
- }catch(e){
- return;
- }
- }
- for (var i=0;i<ele.length;i++){
- swH(i);
- try{
- obj.focus();
- }catch(e){
- continue;
- }
- break;
- }
- try{
- obj.focus();
- }catch(e){
- return false;
- }return true;
- }