/**
* Created by zzw on 2016/8/5.
* 数据校验框架validation.js
*/
var Validation = (function(){
/**
* 0 表示为校验不通过(为空,正则校验不通过) 1 表示校验通过
* msg 向页面返回校验的结果信息
* @type {{msg: string, state: number}}
* @User zzw
* @Time 2016.08.10
*/
var result = {"msg":"输入合法","state":1};
//帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
var userName = /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/;
//密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
var paw = /^[a-zA-Z]\w{5,17}$/;
//校验手机
var mobileReg = /^1[3|4|5|8|7][0-9]{9}$/;
//校验邮箱
var email = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
//校验真实姓名
var realName = /^[\da-zA-Z\u4E00-\u9FA5]{1,10}$/;
//校验字符串中是否含有中文
//var isExitCh = /^[\u4e00-\u9fa5]/;
var isExitCh = new RegExp("[\\u4E00-\\u9FFF]+","g");
//校验是否为空
function isNull(values){
if(values==""||values==null){
return false;
}
return true;
}
//特殊字符正则
var spechaReg = /[`,~,!,@,#,$,%,^,&,*,\(,),\[,\],{,},\|,:,;,',",<,>,+,-,!,@,#,¥,%,……,*,(,),\【,\】,{,},\|,:,;,‘,’,“,”,《,》,,,。,\s]/;
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
var IDCardReg1 = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
//身份证校验
var vcity = {
11 : "北京",
12 : "天津",
13 : "河北",
14 : "山西",
15 : "内蒙古",
21 : "辽宁",
22 : "吉林",
23 : "黑龙江",
31 : "上海",
32 : "江苏",
33 : "浙江",
34 : "安徽",
35 : "福建",
36 : "江西",
37 : "山东",
41 : "河南",
42 : "湖北",
43 : "湖南",
44 : "广东",
45 : "广西",
46 : "海南",
50 : "重庆",
51 : "四川",
52 : "贵州",
53 : "云南",
54 : "西藏",
61 : "陕西",
62 : "甘肃",
63 : "青海",
64 : "宁夏",
65 : "新疆",
71 : "台湾",
81 : "香港",
82 : "澳门",
91 : "国外"
};
//身份证号码验证
//检查号码是否符合规范,包括长度,类型
var isCardNo = function(card) {
if (IDCardReg1.test(card) === false) {
return false;
}
return true;
};
//取身份证前两位,校验省份
var checkProvince = function(card) {
var province = card.substr(0, 2);
if (vcity[province] == undefined) {
return false;
}
return true;
};
//检查生日是否正确
var checkBirthday = function(card) {
var len = card.length;
//身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
if (len == '15') {
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19' + year + '/' + month + '/' + day);
return this.verifyBirthday('19' + year, month, day, birthday);
};
//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
if (len == '18') {
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year + '/' + month + '/' + day);
return verifyBirthday(year, month, day, birthday);
}
return false;
};
//校验日期
var verifyBirthday = function(year, month, day, birthday) {
var now = new Date();
var now_year = now.getFullYear();
//年月日是否合理
if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {
//判断年份的范围(3岁到100岁之间)
var time = now_year - year;
if (time >= 3 && time <= 100) {
return true;
}
return false;
}
return false;
};
//校验位的检测
var checkParity = function(card) {
//15位转18位
card = changeFivteenToEighteen(card);
var len = card.length;
if (len == '18') {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for ( i = 0; i < 17; i++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1)) {
return true;
}
return false;
}
return false;
};
//15位转18位身份证号
var changeFivteenToEighteen = function(card) {
if (card.length == '15') {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for ( i = 0; i < 17; i++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
card += arrCh[cardTemp % 11];
return card;
}
return card;
};
return{
//校验是否含有特殊字符
existSpecialCharacter:function(str){
if(spechaReg.test(str)){
return {"msg":"不能包含特殊字符","state":0};
}
return result;
},
//校验手机
checkMobileNo:function(_mobileNo){
debugger;
if(!isNull(_mobileNo)){
return {"msg":"手机号码不能为空","state":0};
}
if(!mobileReg.test(_mobileNo)){
return {"msg":"手机号格式不正确","state":0};
}
return {"msg":"输入合法","state":1};
},
//校验用户名
checkUserName:function(_username){
if(!isNull(_username)){
return {"msg":"用户名不能为空","state":0};
}
if(!userName.test(_username)){
return {"msg":"用户名必须由为字母开头,允许5~16字节,字母数字或下划线组成","state":0};
}
return result;
},
//校验真实姓名
checkRealName:function(_realName){
if(!isNull(_realName)){
return {"msg":"真实姓名不能为空","state":0};
}
if(!realName.test(_realName)){
return {"msg":"姓名不存在,或格式有误,请重新输入。","state":0};
}
return result;
},
//校验密码
checkPaw:function(_paw){
if(!isNull(_paw)){
return {"msg":"密码不能为空","state":0};
}
if(!paw.test(_paw)){
return {"msg":"密码必须由字母开头,长度在6~18之间,字母、数字和下划线组成","state":0};
}
return result;
},
//校验邮箱
checkEmail:function(_email){
if(!isNull(_email)){
return {"msg":"邮箱不能为空","state":0};
}
if(!paw.test(_email)){
return {"msg":"邮箱不符合规范","state":0};
}
return result;
},
//校验字符串是否包含中文
checkIsExitZh:function(_str){
if(isExitCh.test(_str)){
return {"msg":"字符串中含有中文","state":0};
}
return result
},
//校验身份证号
checkIdentificationCard:function(_idCard){
if(!isNull(_idCard)){
return {"msg":"身份证号不能为空","state":0};
}
//校验长度,类型
if (isCardNo(_idCard) === false) {
return {"msg":"您输入的身份证号码不正确,请重新输入","state":0};
}
//检查省份
if (checkProvince(_idCard) === false) {
return {"msg":"您输入的身份证号码不正确,请重新输入","state":0};
}
//校验生日
if (checkBirthday(_idCard) === false) {
return {"msg":"您输入的身份证号码不正确,请重新输入","state":0};
}
//检验位的检测
if (checkParity(_idCard) === false) {
return {"msg":"您输入的身份证号码不正确,请重新输入","state":0};
}
return result;
}
}
})();
//---------------以下是测试代码--------------------------------------------
//测试手机号码
//console.log(Validation.checkMobileNo(""));
//测试用户名
//console.log(Validation.checkUserName("1adfdf"));
//测试密码
//console.log(Validation.checkPaw("111"));
//测试邮箱
//console.log(Validation.checkEmail("111@.com"));
//测试是否含有中文
//console.log(Validation.checkIsExitZh("11.11."));
//测试身份证号是否正确
//console.log(Validation.checkIdentificationCard("4211251993121546"));
//测试是否含有特殊字符
//console.log(Validation.existSpecialCharacter("4211251546"));
//校验真实姓名
//console.log(Validation.checkRealName("zhansgn12a"));
帐号,密码,手机,邮箱,姓名较验工具类
最新推荐文章于 2021-03-30 15:45:59 发布