视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js验证模型自我实现的具体方法_javascript技巧
2020-11-27 21:10:18 责编:小采
文档


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

ValidateHelper是一个对象,一些验证的方法就是在这个对象里面,我们规定一下,js验证用户的输入有两返回结果,一个成功,一个是失败。成功的时候我们输出成功的提示,
失败的时候我们输出失败的提示,对应的两个输出方法:
代码如下:
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 = ""
+ msg
+ "";
emObj.empty().append(spanElement);

},

还有一个清除提示的方法:
代码如下:
clearMessage: function(jqueryObj) {
var emObj = $(jqueryObj.parent().find('em')[0]);
emObj.empty();
},

我们已经写了成功和失败提示方法,以及清除提示的方法,这个三个是我们在后面会一直调用的基本方法。
好了,我们写一个验证用户输入不能为空的方法:
代码如下:
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中会触发的,我们提交数据的时候还会用到得哦:
代码如下:
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 :
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FormValidateModuleEx._Default" %>






<%----%>













  • <%--IdCardValidate($(this),'身份证的格式不正确');--%>










  • js:
    代码如下:
    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 = ""
    + msg
    + "";
    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());
    }
    });
    }
    }

    下载本文
    显示全文
    专题