jquery插件validation实现验证身份证号等
先推荐一个基于bootstrap的jQueryvalidation插件:http://thrilleratplay.github.io/jquery-validation-bootstrap-tooltip/
jQueryvalidation添加验证规则
validata.html
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
<!--TemplateBeginEditablename="doctitle"-->
<title>无标题文档</title>
<scriptsrc="lib/jquery.js"type="text/javascript"></script>
<scriptsrc="lib/jquery.validate.js"type="text/javascript"></script>
<scriptsrc="lib/card.js"type="text/javascript"></script>
<scriptsrc="lib/validata.js"type="text/javascript"></script>
<styletype="text/css">
em.success{
background:url("images/tips_arrow.gif")no-repeatleft0px;
padding-left:16px;
margin-left:2px;
}
em.error{
background:url("images/tips_arrow.gif")no-repeatleft-51px;
display:inline;
padding-left:10px;
font-style:normal;
font-size:11px;
margin-left:2px;
font-family:12px/162%Arial,Helvetica,sans-serif;
}
</style>
</head>
<body>
<formclass="cmsform"id="commentForm"method="get"action="">
<p>
<labelfor="cusername">姓名</label><em>*</em>
<inputid="cusername"name="username"size="25"/>
</p>
<p>
<labelfor="cemail">电子邮件</label><em>*</em>
<inputid="cemail"name="email"size="25"/>
</p>
<p>
<labelfor="card">身份证号</label><em>*</em>
<inputid="card"name="card"size="25"/>
</p>
<p>
<labelfor="passport">护照编号</label><em>*</em>
<inputid="passport"name="passport"size="25"/>
</p>
<p>
<labelfor="phone">电话号码</label><em>*</em>
<inputid="phone"name="phone"size="25"/>
</p>
</form>
</body>
</html>
validata.js
$(function(){
$.validator.setDefaults({
submitHandler:function(form){
form.submit();
}
});
//字符验证
jQuery.validator.addMethod("stringCheck",function(value,element){
returnthis.optional(element)||/^[\u0391-\uFFE5\w]+$/.test(value);
},"只能包括中文字、英文字母、数字和下划线");
//中文字两个字节
jQuery.validator.addMethod("byteRangeLength",function(value,element,param){
varlength=value.length;
for(vari=0;i<value.length;i++){
if(value.charCodeAt(i)>127){
length++;
}
}
returnthis.optional(element)||(length>=param[0]&&length<=param[1]);
},"请确保输入的值在3-15个字节之间(一个中文字算2个字节)");
//身份证号码验证
jQuery.validator.addMethod("isIdCardNo",function(value,element){
returnthis.optional(element)||idCardNoUtil.checkIdCardNo(value);
},"请正确输入您的身份证号码");
//护照编号验证
jQuery.validator.addMethod("passport",function(value,element){
returnthis.optional(element)||checknumber(value);
},"请正确输入您的护照编号");
//手机号码验证
jQuery.validator.addMethod("isMobile",function(value,element){
varlength=value.length;
varmobile=/^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
returnthis.optional(element)||(length==11&&mobile.test(value));
},"请正确填写您的手机号码");
//电话号码验证
jQuery.validator.addMethod("isTel",function(value,element){
vartel=/^\d{3,4}-?\d{7,9}$/;//电话号码格式010-12345678
returnthis.optional(element)||(tel.test(value));
},"请正确填写您的电话号码");
//联系电话(手机/电话皆可)验证
jQuery.validator.addMethod("isPhone",function(value,element){
varlength=value.length;
varmobile=/^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
vartel=/^\d{3,4}-?\d{7,9}$/;
returnthis.optional(element)||(tel.test(value)||mobile.test(value));
},"请正确填写您的联系电话");
//邮政编码验证
jQuery.validator.addMethod("isZipCode",function(value,element){
vartel=/^[0-9]{6}$/;
returnthis.optional(element)||(tel.test(value));
},"请正确填写您的邮政编码");
//开始验证
$('#commentForm').validate({
rules:{
username:{
required:true,
stringCheck:true,
byteRangeLength:[3,15]
},
email:{
required:true,
email:true
},
phone:{
required:true,
isMobile:true
},
address:{
required:true,
stringCheck:true,
byteRangeLength:[3,100]
},
card:{
required:true,
isIdCardNo:true
},
passport:{
required:true,
passport:true
}
},
messages:{
username:{
required:"请填写用户名",
stringCheck:"用户名只能包括中文字、英文字母、数字和下划线",
byteRangeLength:"用户名必须在3-15个字符之间(一个中文字算2个字符)"
},
email:{
required:"<fontcolor=red>请输入一个Email地址</fond>",
email:"请输入一个有效的Email地址"
},
phone:{
required:"请输入您的联系电话",
isPhone:"请输入一个有效的联系电话"
},
address:{
required:"请输入您的联系地址",
stringCheck:"请正确输入您的联系地址",
byteRangeLength:"请详实您的联系地址以便于我们联系您"
},
card:{
required:"请输入身份证号",
isIdCardNo:"请输入正确的身份证号"
},
passport:{
required:"请输入护照编号",
passport:"请输入正确的护照编号"
}
},
focusInvalid:false,
onkeyup:false,
errorPlacement:function(error,element){
error.appendTo(element.parent());
},
errorElement:"em",
error:function(label){label.text("").addClass("error");}
});
})
card.js
varidCardNoUtil={
provinceAndCitys:{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:"国外"},
powers:["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],
parityBit:["1","0","X","9","8","7","6","5","4","3","2"],
genders:{male:"男",female:"女"},
checkAddressCode:function(addressCode){
varcheck=/^[1-9]\d{5}$/.test(addressCode);
if(!check)returnfalse;
if(idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0,2))]){
returntrue;
}else{
returnfalse;
}
},
checkBirthDayCode:function(birDayCode){
varcheck=/^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
if(!check)returnfalse;
varyyyy=parseInt(birDayCode.substring(0,4),10);
varmm=parseInt(birDayCode.substring(4,6),10);
vardd=parseInt(birDayCode.substring(6),10);
varxdata=newDate(yyyy,mm-1,dd);
if(xdata>newDate()){
returnfalse;//生日不能大于当前日期
}elseif((xdata.getFullYear()==yyyy)&&(xdata.getMonth()==mm-1)&&(xdata.getDate()==dd)){
returntrue;
}else{
returnfalse;
}
},
getParityBit:function(idCardNo){
varid17=idCardNo.substring(0,17);
varpower=0;
for(vari=0;i<17;i++){
power+=parseInt(id17.charAt(i),10)*parseInt(idCardNoUtil.powers[i]);
}
varmod=power%11;
returnidCardNoUtil.parityBit[mod];
},
checkParityBit:function(idCardNo){
varparityBit=idCardNo.charAt(17).toUpperCase();
if(idCardNoUtil.getParityBit(idCardNo)==parityBit){
returntrue;
}else{
returnfalse;
}
},
checkIdCardNo:function(idCardNo){
//15位和18位身份证号码的基本校验
varcheck=/^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
if(!check)returnfalse;
//判断长度为15位或18位
if(idCardNo.length==15){
returnidCardNoUtil.check15IdCardNo(idCardNo);
}elseif(idCardNo.length==18){
returnidCardNoUtil.check18IdCardNo(idCardNo);
}else{
returnfalse;
}
},
//校验15位的身份证号码
check15IdCardNo:function(idCardNo){
//15位身份证号码的基本校验
varcheck=/^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
if(!check)returnfalse;
//校验地址码
varaddressCode=idCardNo.substring(0,6);
check=idCardNoUtil.checkAddressCode(addressCode);
if(!check)returnfalse;
varbirDayCode='19'+idCardNo.substring(6,12);
//校验日期码
returnidCardNoUtil.checkBirthDayCode(birDayCode);
},
//校验18位的身份证号码
check18IdCardNo:function(idCardNo){
//18位身份证号码的基本格式校验
varcheck=/^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
if(!check)returnfalse;
//校验地址码
varaddressCode=idCardNo.substring(0,6);
check=idCardNoUtil.checkAddressCode(addressCode);
if(!check)returnfalse;
//校验日期码
varbirDayCode=idCardNo.substring(6,14);
check=idCardNoUtil.checkBirthDayCode(birDayCode);
if(!check)returnfalse;
//验证校检码
returnidCardNoUtil.checkParityBit(idCardNo);
},
formateDateCN:function(day){
varyyyy=day.substring(0,4);
varmm=day.substring(4,6);
vardd=day.substring(6);
returnyyyy+'-'+mm+'-'+dd;
},
//获取信息
getIdCardInfo:function(idCardNo){
varidCardInfo={
gender:"",//性别
birthday:""//出生日期(yyyy-mm-dd)
};
if(idCardNo.length==15){
varaday='19'+idCardNo.substring(6,12);
idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
if(parseInt(idCardNo.charAt(14))%2==0){
idCardInfo.gender=idCardNoUtil.genders.female;
}else{
idCardInfo.gender=idCardNoUtil.genders.male;
}
}elseif(idCardNo.length==18){
varaday=idCardNo.substring(6,14);
idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
if(parseInt(idCardNo.charAt(16))%2==0){
idCardInfo.gender=idCardNoUtil.genders.female;
}else{
idCardInfo.gender=idCardNoUtil.genders.male;
}
}
returnidCardInfo;
},
getId15:function(idCardNo){
if(idCardNo.length==15){
returnidCardNo;
}elseif(idCardNo.length==18){
returnidCardNo.substring(0,6)+idCardNo.substring(8,17);
}else{
returnnull;
}
},
getId18:function(idCardNo){
if(idCardNo.length==15){
varid17=idCardNo.substring(0,6)+'19'+idCardNo.substring(6);
varparityBit=idCardNoUtil.getParityBit(id17);
returnid17+parityBit;
}elseif(idCardNo.length==18){
returnidCardNo;
}else{
returnnull;
}
}
};
//验证护照是否正确
functionchecknumber(number){
varstr=number;
//在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号
varExpression=/(P\d{7})|(G\d{8})/;
varobjExp=newRegExp(Expression);
if(objExp.test(str)==true){
returntrue;
}else{
returnfalse;
}
};
以上所述就是本文的全部内容了,希望大家能够喜欢。