JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
本文实例总结了JS常见简单正则表达式验证功能。分享给大家供大家参考,具体如下:
下面都是一些比较常用简单的验证,像那些特殊的复杂的情况这里不进行考虑
1、验证电话号码或者手机号码
/**
*验证电话号码(手机号码+电话号码)
*@paramobj
*@returns{Boolean}
*/
functioncheckPhoneNum(obj){
if(/^((\d{3}-\d{8}|\d{4}-\d{7,8})|(1[3|5|7|8][0-9]{9}))$/.test(obj)){
returntrue;
}
}
2、验证地址(中文、英文、数字)
/**
*验证企业地址(中文、英文、数字)
*@paramobj
*/
functioncheckAddress(obj){
if(/^[\u4e00-\u9fa5a-zA-Z0-9]+$/.test(obj)){
returntrue;
}
}
3、验证用户名
/**
*验证用户名输入格式
*@paramobj
*@returns{Boolean}
*/
functioncheckUserName(obj){
if(/^[a-zA-Z0-9_-]{3,16}$/.test(obj)){
returntrue;
}
}
4、验证密码
/**
*验证密码输入格式
*@paramobj
*@returns{Boolean}
*/
functionverifyPassword(obj){
if(/^[a-z0-9_-]{5,18}$/.test(obj)){
returntrue;
}
}
5、验证企业税号
/**
*验证税号
*15或者17或者18或者20位字母、数字组成
*@paramobj
*@returns{Boolean}
*/
functioncheckTax(obj){
if(/^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/.test(obj)){
returntrue;
}
}
6、验证金额
/**
*验证金额(可验证大于等于零,小于等于99999999.99的数字)
*@paramobj
*@returns{Boolean}
*/
functioncheckMoney(obj){
if(/^([1-9][\d]{0,7}|0)(\.[\d]{1,2})?$/.test(obj)){
returntrue;
}
}
7、验证身份证号,包括大陆身份证号,和港澳台身份证号,当然这里都只是简单的规范一下,实际的像香港的身份证号最后的括号里面的校验位都是需要根据前面的
数字依据一定的加权算法算出来进行校验的,这里没有涉及到。如果需要特别精确则可以去研究一番。
/**
*验证大陆的身份证号
*验证身份证号
*身份证号码为15位或18位的全数字,或者18位时前17位是数字,最后一位是校验位,可能是数字或字符X或x
*@paramobj
*/
functioncheckIdCard(obj){
if(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(obj)){
returntrue;
}
}
/**
*验证港澳台身份证
*@paramobj
*/
functioncheckGATIdCard(obj){
varreg1=/^[A-Z]{1,2}[0-9]{6}[\(|\(]?[0-9A-Z][\)|\)]?$/;//香港格式1(香港身份证号码结构:XYabcdef(z))
varreg2=/^[A-Z][0-9]{8,12}$/;//香港格式2(H60152555)
varreg3=/^[1|5|7][0-9]{6}[\(|\(]?[0-9A-Z][\)|\)]?$/;//澳门,8位数,不包含出生年月格式为xxxxxxx(x)注:x全为数字,无英文字母首位数只有1、5、7字开头的
varreg4=/^[a-zA-Z][0-9]{9}$/;//台湾:10位字母和数字
if(reg1.test(obj)||reg2.test(obj)||reg3.test(obj)||reg4.test(obj)){
returntrue;
}
}
下面是比较权威的验证身份证号的写法:
/**
*身份证15位编码规则:ddddddyymmddxxp
*dddddd:地区码
*yymmdd:出生年月日
*xx:顺序类编码,无法确定
*p:性别,奇数为男,偶数为女
*身份证18位编码规则:ddddddyyyymmddxxxy
*dddddd:地区码
*yyyymmdd:出生年月日
*xxx:顺序类编码,无法确定,奇数为男,偶数为女
*y:校验码,该位数值可通过前17位计算获得
*18位号码加权因子为(从右到左)Wi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1]
*验证位Y=[1,0,X,9,8,7,6,5,4,3,2]
*校验位计算公式:Y_P=mod(∑(Ai×Wi),11)
*i为身份证号码从右往左数的2...18位;Y_P为脚丫校验码所在校验码数组位置
*
*/
//构造函数,变量为15位或者18位的身份证号码
functionIdCardValidate(CardNo){
this.Valid=false;
this.ID15='';
this.ID18='';
this.Local='';
if(CardNo!=null)
this.SetCardNo(CardNo);
}
//设置身份证号码,15位或者18位
IdCardValidate.prototype.SetCardNo=function(CardNo){
this.ID15='';
this.ID18='';
this.Local='';
CardNo=CardNo.replace("","");
varstrCardNo;
if(CardNo.length==18){
pattern=/^\d{17}(\d|x|X)$/;
if(pattern.exec(CardNo)==null)
return;
strCardNo=CardNo.toUpperCase();
}else{
pattern=/^\d{15}$/;
if(pattern.exec(CardNo)==null)
return;
strCardNo=CardNo.substr(0,6)+'19'+CardNo.substr(6,9)
strCardNo+=this.GetVCode(strCardNo);
}
this.Valid=this.CheckValid(strCardNo);
}
//校验身份证有效性
IdCardValidate.prototype.IsValid=function(){
returnthis.Valid;
}
//返回生日字符串,格式如下,1981-10-10
IdCardValidate.prototype.GetBirthDate=function(){
varBirthDate='';
if(this.Valid)
BirthDate=this.GetBirthYear()+'-'+this.GetBirthMonth()+'-'
+this.GetBirthDay();
returnBirthDate;
}
//返回生日中的年,格式如下,1981
IdCardValidate.prototype.GetBirthYear=function(){
varBirthYear='';
if(this.Valid)
BirthYear=this.ID18.substr(6,4);
returnBirthYear;
}
//返回生日中的月,格式如下,10
IdCardValidate.prototype.GetBirthMonth=function(){
varBirthMonth='';
if(this.Valid)
BirthMonth=this.ID18.substr(10,2);
if(BirthMonth.charAt(0)=='0')
BirthMonth=BirthMonth.charAt(1);
returnBirthMonth;
}
//返回生日中的日,格式如下,10
IdCardValidate.prototype.GetBirthDay=function(){
varBirthDay='';
if(this.Valid)
BirthDay=this.ID18.substr(12,2);
returnBirthDay;
}
//返回性别,1:男,0:女
IdCardValidate.prototype.GetSex=function(){
varSex='';
if(this.Valid)
Sex=this.ID18.charAt(16)%2;
returnSex;
}
//返回15位身份证号码
IdCardValidate.prototype.Get15=function(){
varID15='';
if(this.Valid)
ID15=this.ID15;
returnID15;
}
//返回18位身份证号码
IdCardValidate.prototype.Get18=function(){
varID18='';
if(this.Valid)
ID18=this.ID18;
returnID18;
}
//返回所在省,例如:上海市、浙江省
IdCardValidate.prototype.GetLocal=function(){
varLocal='';
if(this.Valid)
Local=this.Local;
returnLocal;
}
//获取身份证号码为18位时最后的验证位
IdCardValidate.prototype.GetVCode=function(CardNo17){
varWi=newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
varAi=newArray('1','0','X','9','8','7','6','5','4','3','2');
varcardNoSum=0;
for(vari=0;i<CardNo17.length;i++)
cardNoSum+=CardNo17.charAt(i)*Wi[i];
varseq=cardNoSum%11;
returnAi[seq];
}
IdCardValidate.prototype.CheckValid=function(CardNo18){
if(this.GetVCode(CardNo18.substr(0,17))!=CardNo18.charAt(17))
returnfalse;
if(!this.IsDate(CardNo18.substr(6,8)))
returnfalse;
varaCity={
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:"国外"
};
if(aCity[parseInt(CardNo18.substr(0,2))]==null)
returnfalse;
this.ID18=CardNo18;
this.ID15=CardNo18.substr(0,6)+CardNo18.substr(8,9);
this.Local=aCity[parseInt(CardNo18.substr(0,2))];
returntrue;
}
//验证18位数身份证号码中的生日是否是有效生日
IdCardValidate.prototype.IsDate=function(strDate){
varr=strDate.match(/^(\d{1,4})(\d{1,2})(\d{1,2})$/);
if(r==null)
returnfalse;
vard=newDate(r[1],r[2]-1,r[3]);
return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[2]&&d
.getDate()==r[3]);
}
把上面的代码放到一个js文件中,然后在(jsp)页面中引入该js文件,再调用即可
varcheckIdCard=newIdCardValidate(id_card);
if(!checkIdCard.IsValid()){
alert('您输入的身份证格式不正确!');
return;
}
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript正则表达式技巧大全》、《JavaScript替换操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。