js验证模型自我实现

市面上有很多表单验证的框架,教我们怎么验证表单的数据提交,说实话也真的很简单,但是我们会有一种感觉我们要是离开了这些框架的时候,我们有时候会束手无策,然后js验证写的很不规范,没有一套比较好的模式,那我写这篇的目的就是:我们自己构建js验证应该是什么样子的,来慢慢看一下。
假设我们现在写一个登录的页面(这可能是最简单的数据提交了哦),html页面会有一个用户名和一个密码的文本框让我们用户输入自己的用户名和密码,我们肯定是要判断用户名和密码是否为空,很明显这样的js验证判断是放在onblur事件里面触发,html代码如下:

ExpandedBlockStart.gif View Code
< li >
             < label  for ="email" >
                用户名:
             </ label >
             < input  name ="email"  type ="text"  id ="email"  maxlength ="50"  onblur ="return ValidateHelper.validateStringValueIsEmpty($(this),'通过','不能为空');"   />< em ></ em >
         </ li >
         < li >
             < label  for ="setPwd" >
                密码:
             </ label >
             < input  name ="setPwd"  type ="password"  id ="setPwd"  maxlength ="16"  onblur ="return ValidateHelper.validateStringValueIsEmpty($(this),'通过','不能为空');"   />< em ></ em >
         </ li >

ValidateHelper是一个对象,一些验证的方法就是在这个对象里面,我们规定一下,js验证用户的输入有两返回结果,一个成功,一个是失败。成功的时候我们输出成功的提示,

失败的时候我们输出失败的提示,对应的两个输出方法:

ExpandedBlockStart.gif View Code
    normalMessage:  function(jqueryObj, msg) {
         var emObj = $(jqueryObj.parent().find('em')[0]);
        emObj.empty().append(msg);
    },
    warningMessage:  function(jqueryObj, msg) {
        ValidateHelper.clearMessage(jqueryObj);
         var emObj = $(jqueryObj.parent().find('em')[0]);
         var spanElement = "<span style='color:#FF4C31;float:left;height:23px;line-height:23px;padding:0 10px 0 35px;'>"
                + msg
                + "</span>";
        emObj.empty().append(spanElement);

    },

还有一个清除提示的方法:

ExpandedBlockStart.gif View Code
clearMessage:  function(jqueryObj) {
     var emObj = $(jqueryObj.parent().find('em')[0]);
    emObj.empty();
},

我们已经写了成功和失败提示方法,以及清除提示的方法,这个三个是我们在后面会一直调用的基本方法。

好了,我们写一个验证用户输入不能为空的方法:

ExpandedBlockStart.gif View Code
    validateStringValueIsEmpty:  function(obj, normalMsg, warningMsg) {
         var jqueryObj = $(obj);
        ValidateHelper.clearMessage(obj);
         if ($.trim(jqueryObj.val()).length == 0) {
            ValidateHelper.warningMessage(jqueryObj, warningMsg);
             return  false;
        }
         else {
            ValidateHelper.normalMessage(jqueryObj, normalMsg);
             return  true;
        }
    },

这个方法会在onblur中被调用的验证方法,里面自然也用到了成功和失败提示方法,以及清除提示的方法。参数有三个,要验证的Dom或者jQuery对象、成功提示信息、失败提示信

息。要是为空就失败,要是不为空就成功。

上面写好的方法在onblur中会触发的,我们提交数据的时候还会用到得哦:

ExpandedBlockStart.gif View Code
    initInfo:  function() {

         var userName = $('#email');
         var userPwd = $('#setPwd');
         if (!ValidateHelper.validateStringValueIsEmpty(userName, '通过', '不能为空')) {
            userName.focus();
             return  null;
        }
         if (!ValidateHelper.validateStringValueIsEmpty(userPwd, '通过', '不能为空')) {
            userPwd.focus();
             return  null;
        }

         var userInfo = {
            UserName: userName.val(),
            UserPwd: userPwd.val()
        };

         return userInfo;
    },

    post:  function() {

         var userInfo = ValidateHelper.initInfo();
         if (userInfo ==  null) {
             return;
        }

        $.ajax({
            type: "post",
            dataType: "text",
            url: "Ajax/Module.aspx",
            timeout: 30000,
            data: { UserName: userInfo.UserName, UserPwd: userInfo.UserPwd },
            success:  function(data) {
                alert(data.toString());
            }
        });
    }

这边呢要是在提交数据的时候会调用validateStringValueIsEmpty方法,要是返回的是失败 是不会真的提交给服务器端得。

那上面的情况是一个最简单的处理不为空的情况,要是我们想验证是否是Email 是否是身份证号码,这些复杂的验证实现如下:

 

var Validation = {
    textCount:  function(field, counter, maxLimit) {
         var message = $(field).val();
         if ($(field).val().length > maxLimit)
            $(field).val(message.substring(0, maxLimit))
         // $(counter).text(maxLimit-field.value.length);     
    },
    refreshValidator:  function(img, input) {
        $(img).attr('src', $(img).attr('src') + "&r=" + Math.random());
        $(input).focus();
    },
    isUrl:  function(s) {
         var strRegex =
                            /^((http(s)?|ftp|telnet|news|rtsp|mms):\/\/)?(((\w(\-*\w)*\.)+[a-zA-Z]{2,4})|(((1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).){3}(1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).?))(:\d{0,5})?(\/+.*)*$/;
         return strRegex.test(s);
    },
    isDecimal:  function(d) {  var pattern = /^(([1-9]\d{0,12})|0)(\.\d{1,2})?$/;  return pattern.test(d); },
    isEmail:  function(s) {
         var pattern = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
         return pattern.test(s);
    },
    isLowEmail:  function(s) {
         var b, e;
        b = s.indexOf("@");
        e = s.indexOf(".");
         if (b <= 0)  return  false;
         if (e < 0 || e == (s.length - 1)) {  return  false; }
         return  true;
    },
    clearNoNum:  function(event, obj) {
        event = window.event || event;
         if (event.keyCode == 37 | event.keyCode == 39) {
             return;
        }
        obj.value = obj.value.replace(/[^\d.]/g, "");
        obj.value = obj.value.replace(/^\./g, "");
        obj.value = obj.value.replace(/\.{2,}/g, ".");
        obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
    },
    checkNum:  function(obj) {
        obj.value = obj.value.replace(/\.$/g, "");
    },
    isInteger:  function(value) {
         var integerReg =  new RegExp(/^\d+$/);
         return integerReg.test(value);
    },
    isValidateReg:  function(value) {
         var validateReg = /^([A-Za-z0-9\s\-\_\~\!\@\#\$\%\^\&\*\(\)\|\<\>\?\:\;\"\'\.\[\]\{\}\,\+\`\/\\\=]){6,16}$/;
         if (validateReg.test(value)) {
             return  true;
        }
         return  false;
    },
    isDate:  function(strValue) {
         var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

         if (!objRegExp.test(strValue))
             return  false;
         else {
             var arrayDate = strValue.split(RegExp.$1);
             var intDay = parseInt(arrayDate[2], 10);
             var intYear = parseInt(arrayDate[0], 10);
             var intMonth = parseInt(arrayDate[1], 10);
             if (intMonth > 12 || intMonth < 1) {
                 return  false;
            }
             var arrayLookup = { '1': 31, '3': 31, '4': 30, '5': 31, '6': 30, '7': 31,
                '8': 31, '9': 30, '10': 31, '11': 30, '12': 31
            }
             if (arrayLookup[parseInt(arrayDate[1])] !=  null) {
                 if (intDay <= arrayLookup[parseInt(arrayDate[1])] && intDay != 0)
                     return  true;
            }
             if (intMonth - 2 == 0) {
                 var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0));
                 if (((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <= 28)) && intDay != 0)
                     return  true;
            }
        }
         return  false;
    },
    isZip:  function(value) {
         var validateReg = /^[0-9]{6}$/;
         return validateReg.test(value);
    },
    checkSpecialChar:  function(value) {
         var validateReg = /([~!@#$%^&*\/\\,.\(\)]){6,16}$/;
         return validateReg.test(value);
    },
    CheckSpecialString:  function(value) {
         var validateReg = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/;
         return validateReg.test(value);
    },
    isTel:  function(s) {
         var patrn = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
         if (!patrn.exec(s))  return  false
         return  true
    },

    isMobile:  function(value) {
         var validateReg = /^1\d{10}$/;
         return validateReg.test(value);
    },
    getLength:  function(value) {
         return value.replace(/[^\x00-\xff]/g, "**").length;
    },
    isLicence:  function(value) {
         var validateReg = /^[A-Za-z]{10}[0-9]{10}$/;
         return validateReg.test(value);
    },
    isPersonalCard:  function(value) {
         var validateReg = /(^\d{15}$)|(^\d{17}(\d|[A-Za-z]{1})$)/;
         return validateReg.test(value);
    },
    isOrganizationCodeCard:  function(value) {
         var validateReg = /^[A-Za-z0-9]{9}$/;
         return validateReg.test(value);
    },
    isBankAccount:  function(value) {
         var validateReg = /^[1-9]{1}[0-9]*$/;
         return validateReg.test(value);
    },
    MaxLength:  function(field, maxlimit) {
         var j = field.value.replace(/[^\x00-\xff]/g, "**").length;
         var tempString = field.value;
         var tt = "";
         if (j > maxlimit) {
             for ( var i = 0; i < maxlimit; i++) {
                 if (tt.replace(/[^\x00-\xff]/g, "**").length < maxlimit)
                    tt = tempString.substr(0, i + 1);
                 else
                     break;
            }
             if (tt.replace(/[^\x00-\xff]/g, "**").length > maxlimit) {
                tt = tt.substr(0, tt.length - 1);
                field.value = tt;
            }
             else {
                field.value = tt;
            }
        }
    }
};

 

这个类是写了一些验证Email 、身份证号码等等的正则表达式,供我们后面使用,使用方法如下:

    validateStringValueForEmail:  function(obj, normalMsg, warningMsg) {
         var jqueryObj = $(obj);
        ValidateHelper.clearMessage(obj);
         if (!ValidateHelper.validateStringValueIsEmpty(jqueryObj, "通过", "不能为空")) {
            ValidateHelper.warningMessage(jqueryObj, "不能为空");
             return  false;
        }
         if (!Validation.isEmail(jqueryObj.val())) {
            ValidateHelper.warningMessage(jqueryObj, warningMsg);
             return  false;
        }
         else {
            ValidateHelper.normalMessage(jqueryObj, normalMsg);
             return  true;
        }
    },
    validateStringValueForCardID:  function(obj, normalMsg, warningMsg) {
         var jqueryObj = $(obj);
        ValidateHelper.clearMessage(obj);
         if (!ValidateHelper.validateStringValueIsEmpty(jqueryObj, "通过", "不能为空")) {
            ValidateHelper.warningMessage(jqueryObj, "不能为空");
             return  false;
        }
         if (!Validation.isPersonalCard(jqueryObj.val())) {
            ValidateHelper.warningMessage(jqueryObj, warningMsg);
             return  false;
        }
         else {
            ValidateHelper.normalMessage(jqueryObj, normalMsg);
             return  true;
        }
    },

 

那到这边是基本可以处理我们的一般的js验证了,可以试试以后用在自己的框架上,我们把自己调试的源码附上:
ASPX :

ExpandedBlockStart.gif View Code
<%@ Page Language= " C# " AutoEventWireup= " true " CodeBehind= " Default.aspx.cs " Inherits= " FormValidateModuleEx._Default " %>

<!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 runat= " server ">
    <title></title>

    <script src= " js\jquery-1.6.2.min.js " type= " text/javascript "></script>
    <script src= " js\MyValidate.js " type= " text/javascript "></script>
    <%--<script src= " js\CheckPersonCardID.js " type= " text/javascript "></script>--%>
</head>
<body>
    <div>
        <li>
            <label  for= " email ">
                用户名:
            </label>
            <input name= " email " type= " text " id= " email " maxlength= " 50 " οnblur= " return ValidateHelper.validateStringValueIsEmpty($(this),'通过','不能为空'); " /><em></em>
        </li>
        <li>
            <label  for= " setPwd ">
                密码:
            </label>
            <input name= " setPwd " type= " password " id= " setPwd " maxlength= " 16 " οnblur= " return ValidateHelper.validateStringValueIsEmpty($(this),'通过','不能为空'); " /><em></em>
        </li>
        <li>
            <label  for= " setPwd ">
                身份证:
            </label>
            <input name= " cardId " type= " text " id= " cardId " οnblur= " return ValidateHelper.validateStringValueForCardID($(this),'通过','身份证格式不正确'); " /><em></em><%--IdCardValidate($( this), ' 身份证的格式不正确 ');--%>
        </li>
        <li>
            <label  for= " setPwd ">
                Email:
            </label>
            <input name= " againEmail " type= " text " id= " againEmail " οnblur= " return ValidateHelper.validateStringValueForEmail($(this),'通过','email格式不正确'); " /><em></em>
        </li>
        <li><input οnclick= " return ValidateHelper.post(); " type= " button " id= " btnPost " /></li>  
    </div>
</body>
</html>

js:

ExpandedBlockStart.gif View Code
var Validation = {
    textCount:  function(field, counter, maxLimit) {
         var message = $(field).val();
         if ($(field).val().length > maxLimit)
            $(field).val(message.substring(0, maxLimit))
         // $(counter).text(maxLimit-field.value.length);     
    },
    refreshValidator:  function(img, input) {
        $(img).attr('src', $(img).attr('src') + "&r=" + Math.random());
        $(input).focus();
    },
    isUrl:  function(s) {
         var strRegex =
                            /^((http(s)?|ftp|telnet|news|rtsp|mms):\/\/)?(((\w(\-*\w)*\.)+[a-zA-Z]{2,4})|(((1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).){3}(1\d\d|2([0-4]\d|5[0-5])|[1-9]\d|\d).?))(:\d{0,5})?(\/+.*)*$/;
         return strRegex.test(s);
    },
    isDecimal:  function(d) {  var pattern = /^(([1-9]\d{0,12})|0)(\.\d{1,2})?$/;  return pattern.test(d); },
    isEmail:  function(s) {
         var pattern = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
         return pattern.test(s);
    },
    isLowEmail:  function(s) {
         var b, e;
        b = s.indexOf("@");
        e = s.indexOf(".");
         if (b <= 0)  return  false;
         if (e < 0 || e == (s.length - 1)) {  return  false; }
         return  true;
    },
    clearNoNum:  function(event, obj) {
        event = window.event || event;
         if (event.keyCode == 37 | event.keyCode == 39) {
             return;
        }
        obj.value = obj.value.replace(/[^\d.]/g, "");
        obj.value = obj.value.replace(/^\./g, "");
        obj.value = obj.value.replace(/\.{2,}/g, ".");
        obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
    },
    checkNum:  function(obj) {
        obj.value = obj.value.replace(/\.$/g, "");
    },
    isInteger:  function(value) {
         var integerReg =  new RegExp(/^\d+$/);
         return integerReg.test(value);
    },
    isValidateReg:  function(value) {
         var validateReg = /^([A-Za-z0-9\s\-\_\~\!\@\#\$\%\^\&\*\(\)\|\<\>\?\:\;\"\'\.\[\]\{\}\,\+\`\/\\\=]){6,16}$/;
         if (validateReg.test(value)) {
             return  true;
        }
         return  false;
    },
    isDate:  function(strValue) {
         var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

         if (!objRegExp.test(strValue))
             return  false;
         else {
             var arrayDate = strValue.split(RegExp.$1);
             var intDay = parseInt(arrayDate[2], 10);
             var intYear = parseInt(arrayDate[0], 10);
             var intMonth = parseInt(arrayDate[1], 10);
             if (intMonth > 12 || intMonth < 1) {
                 return  false;
            }
             var arrayLookup = { '1': 31, '3': 31, '4': 30, '5': 31, '6': 30, '7': 31,
                '8': 31, '9': 30, '10': 31, '11': 30, '12': 31
            }
             if (arrayLookup[parseInt(arrayDate[1])] !=  null) {
                 if (intDay <= arrayLookup[parseInt(arrayDate[1])] && intDay != 0)
                     return  true;
            }
             if (intMonth - 2 == 0) {
                 var booLeapYear = (intYear % 4 == 0 && (intYear % 100 != 0 || intYear % 400 == 0));
                 if (((booLeapYear && intDay <= 29) || (!booLeapYear && intDay <= 28)) && intDay != 0)
                     return  true;
            }
        }
         return  false;
    },
    isZip:  function(value) {
         var validateReg = /^[0-9]{6}$/;
         return validateReg.test(value);
    },
    checkSpecialChar:  function(value) {
         var validateReg = /([~!@#$%^&*\/\\,.\(\)]){6,16}$/;
         return validateReg.test(value);
    },
    CheckSpecialString:  function(value) {
         var validateReg = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\uD800-\uDFFF\uFFFE\uFFFF]/;
         return validateReg.test(value);
    },
    isTel:  function(s) {
         var patrn = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
         if (!patrn.exec(s))  return  false
         return  true
    },

    isMobile:  function(value) {
         var validateReg = /^1\d{10}$/;
         return validateReg.test(value);
    },
    getLength:  function(value) {
         return value.replace(/[^\x00-\xff]/g, "**").length;
    },
    isLicence:  function(value) {
         var validateReg = /^[A-Za-z]{10}[0-9]{10}$/;
         return validateReg.test(value);
    },
    isPersonalCard:  function(value) {
         var validateReg = /(^\d{15}$)|(^\d{17}(\d|[A-Za-z]{1})$)/;
         return validateReg.test(value);
    },
    isOrganizationCodeCard:  function(value) {
         var validateReg = /^[A-Za-z0-9]{9}$/;
         return validateReg.test(value);
    },
    isBankAccount:  function(value) {
         var validateReg = /^[1-9]{1}[0-9]*$/;
         return validateReg.test(value);
    },
    MaxLength:  function(field, maxlimit) {
         var j = field.value.replace(/[^\x00-\xff]/g, "**").length;
         var tempString = field.value;
         var tt = "";
         if (j > maxlimit) {
             for ( var i = 0; i < maxlimit; i++) {
                 if (tt.replace(/[^\x00-\xff]/g, "**").length < maxlimit)
                    tt = tempString.substr(0, i + 1);
                 else
                     break;
            }
             if (tt.replace(/[^\x00-\xff]/g, "**").length > maxlimit) {
                tt = tt.substr(0, tt.length - 1);
                field.value = tt;
            }
             else {
                field.value = tt;
            }
        }
    }
};



var ValidateHelper = {
    validateStringValueIsEmpty:  function(obj, normalMsg, warningMsg) {
         var jqueryObj = $(obj);
        ValidateHelper.clearMessage(obj);
         if ($.trim(jqueryObj.val()).length == 0) {
            ValidateHelper.warningMessage(jqueryObj, warningMsg);
             return  false;
        }
         else {
            ValidateHelper.normalMessage(jqueryObj, normalMsg);
             return  true;
        }
    },
    validateStringValueForEmail:  function(obj, normalMsg, warningMsg) {
         var jqueryObj = $(obj);
        ValidateHelper.clearMessage(obj);
         if (!ValidateHelper.validateStringValueIsEmpty(jqueryObj, "通过", "不能为空")) {
            ValidateHelper.warningMessage(jqueryObj, "不能为空");
             return  false;
        }
         if (!Validation.isEmail(jqueryObj.val())) {
            ValidateHelper.warningMessage(jqueryObj, warningMsg);
             return  false;
        }
         else {
            ValidateHelper.normalMessage(jqueryObj, normalMsg);
             return  true;
        }
    },
    validateStringValueForCardID:  function(obj, normalMsg, warningMsg) {
         var jqueryObj = $(obj);
        ValidateHelper.clearMessage(obj);
         if (!ValidateHelper.validateStringValueIsEmpty(jqueryObj, "通过", "不能为空")) {
            ValidateHelper.warningMessage(jqueryObj, "不能为空");
             return  false;
        }
         if (!Validation.isPersonalCard(jqueryObj.val())) {
            ValidateHelper.warningMessage(jqueryObj, warningMsg);
             return  false;
        }
         else {
            ValidateHelper.normalMessage(jqueryObj, normalMsg);
             return  true;
        }
    },
    normalMessage:  function(jqueryObj, msg) {
         var emObj = $(jqueryObj.parent().find('em')[0]);
        emObj.empty().append(msg);
    },
    warningMessage:  function(jqueryObj, msg) {
        ValidateHelper.clearMessage(jqueryObj);
         var emObj = $(jqueryObj.parent().find('em')[0]);
         var spanElement = "<span style='color:#FF4C31;float:left;height:23px;line-height:23px;padding:0 10px 0 35px;'>"
                + msg
                + "</span>";
        emObj.empty().append(spanElement);

    },
    clearMessage:  function(jqueryObj) {
         var emObj = $(jqueryObj.parent().find('em')[0]);
        emObj.empty();
    },
    initInfo:  function() {

         var userName = $('#email');
         var userPwd = $('#setPwd');
         if (!ValidateHelper.validateStringValueIsEmpty(userName, '通过', '不能为空')) {
            userName.focus();
             return  null;
        }
         if (!ValidateHelper.validateStringValueIsEmpty(userPwd, '通过', '不能为空')) {
            userPwd.focus();
             return  null;
        }

         var userInfo = {
            UserName: userName.val(),
            UserPwd: userPwd.val()
        };

         return userInfo;
    },

    post:  function() {

         var userInfo = ValidateHelper.initInfo();
         if (userInfo ==  null) {
             return;
        }

        $.ajax({
            type: "post",
            dataType: "text",
            url: "Ajax/Module.aspx",
            timeout: 30000,
            data: { UserName: userInfo.UserName, UserPwd: userInfo.UserPwd },
            success:  function(data) {
                alert(data.toString());
            }
        });
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值