论坛首页 Web前端技术论坛

自己写的验证类【正则表达式】

浏览 2120 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-04-14   最后修改:2010-04-11
自己写的验证类,希望大家批评
下面的代码在我上传的包里有,请下载查看





/*
version : 1.0
author : huxg
date : 2008-10-1
*/
var Reg = {};

/************************数字部分***********************/
//数字
Reg["num"] = /^\d+$/;
//整数
Reg["int"] = /^(-|\+)?\d+$/;
//正整数(用于ID的验证)
Reg["int+"] = /^[1-9]+\d*$/;
//负整数
Reg["int-"] = /^-\d+$/;

Reg.isDouble = function(value,point,sign){
try{
var signstr = "",pointstr = "";
if(sign == "+")
signstr = "(\\+)?";
else if(sign == "-")
signstr = "-";
else
signstr = "(-|\\+)?";
if(isNaN(point))//不限制小数
pointstr = "(\\d+(\\.)\\d+)|(\\d+)";
else{//限制小数
if(point<=0)//无小数
pointstr = "\\d+";
else//有小数
pointstr = "\\d+(\.)\\d{"+point+"}";
}
var reg = new RegExp("^"+signstr+"("+pointstr+")$");
return reg.test(value);
}catch(e){
throw e;
}
};
/************************字符部分***********************/
//英文
Reg["en"] = /^[a-zA-Z]+$/;
//大写英文
Reg["capture"] = /^[A-Z]+$/;
//小写英文
Reg["little"] = /^[a-z]+$/;
//英文单词(包括下划线和数字)
Reg["word"] = /^\w+$/;
//中文
Reg["zh"] = /^[\u4E00-\uFA29]+$/;
//中英混合
Reg["zh-en"] = /^[\u4E00-\uFA29a-zA-Z]+$/;
Reg["zh-en-num"] = /^[\u4E00-\uFA29a-zA-Z0-9]+$/;
Reg["zh-word"] = /^[\u4E00-\uFA29\w]+$/;
//英文数字
Reg["en-num"] = /^[a-zA-Z0-9]+$/;
//是否为空,包括空字符
Reg["blank"] = /^\s*$/;

/************************应用部分***********************/
//邮政编码(中国)
Reg["zip"] = /^\d{6}$/;
//ip地址
Reg["ip"] = /^[0-2]?[0-5]?[0-5]{1}\.[0-2]?[0-5]?[0-5]{1}\.[0-2]?[0-5]?[0-5]{1}\.[0-2]?[0-5]?[0-5]{1}$/;
//QQ
Reg["qq"] = /^\d{4,11}$/;
//mobile
Reg["mobile"] = /^1\d{12}$/;
//tel
Reg["tel"] = /^(\d+\-?\d+)+$/;
//邮箱
Reg["email"] = /^\w+@\w+\.(com|cn)(\.(com|cn))?$/;

//日期(yyyy-mm-dd)
Reg["date-a"] = /^\d{4}-(([0]?[1-9])|10|11|12)(-(([0]?[1-9])|(1[0-9])|(2[0-9])|(3[0-1])))?$/;
//到天
Reg["date-d"] = /^\d{4}-(([0]?[1-9])|10|11|12)-(([0]?[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))$/;
//到月
Reg["date-m"] = /^\d{4}-(([0]?[1-9])|10|11|12)$/;
//到天
Reg["date"] = Reg["date-d"];
//时间(hh:mm:ss || hh:mm)
Reg["time-a"] = /^(([0]?[0-9])|(1[0-9])|(2[0-3])):(([0]?[0-9])|([1-5][0-9]))(:(([0]?[0-9])|([1-5][0-9])))?$/;
//到秒
Reg["time-s"] = /^(([0]?[0-9])|(1[0-9])|(2[0-3])):(([0]?[0-9])|([1-5][0-9])):(([0]?[0-9])|([1-5][0-9]))$/;
//到分
Reg["time-m"] = /^(([0]?[0-9])|(1[0-9])|(2[0-3])):(([0]?[0-9])|([1-5][0-9]))$/;
//到秒
Reg["time"] = Reg["time-s"];
//长时间(yyyy-mm-dd hh:mm) 或 (yyyy-mm-dd hh:mm:ss)
Reg["times"] = /^\d{4}-(([0]?[1-9])|10|11|12)-(([0]?[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))\x20(([0]?[0-9])|(1[0-9])|(2[0-3])):(([0]?[0-9])|([1-5][0-9]))(:(([0]?[0-9])|([1-5][0-9])))?$/;
//只验证格式(做到最近似验证),未对具体的编码验证,只接收1900年到2099年出生的身份证
Reg["idcard"] = /^[1-9]\d{5}(19|20)?\d{2}((0[1-9])|(1[0-2]))((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))\d{3}[X0-9]$/;

//根据正则检查
Reg.test = function(value,regstr,nullable){
try{
if(nullable){
if(!value || value.length==0)
return true;
}
if(regstr instanceof RegExp)
return regstr.test(value);
else if(typeof(regstr) == "string"){
var lowreg = regstr.toLowerCase();
if(Reg[lowreg])
return Reg[lowreg].test(value);
else{
var r = new RegExp(regstr);
return r.test(value);
}
}
}catch(e){
throw e;
}
};
//精确验证身份证
/*参数部分*/
//身份证号:必选
//生日:可选,传入参数均为字符型,生日为"yyyymmdd"格式即可
//地区编码:可选,可传3位或者6位,3位为前3个验证,6位精确到县
//性别:可选,"M"代表男 "F"代表女 或者1代表男,2代表女
Reg.realIdCard = function(idcard,birth,areacode,sex){
try{
if(!(Reg.test(idcard,"idcard",false)))//精确格式不匹配
return false;
//计算校正码并验证
if(idcard.length == 18){
var jcodes =["1","0","X","9","8","7","6","5","4","3","2"];
var cardWi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];
var mod = 0;
for(var i=0;i<17;i++){
var temp = parseInt(idcard.charAt(i));
mod += temp * cardWi[i];
}
mod = mod%11;
if(idcard.charAt(17) != jcodes[mod])
return false;
}
if(birth){//验证生日部分
var birstr = "";
if(idcard.length==18)
birstr = idcard.substring(6,14);
else if(idcard.length==15)
birstr = "19" + idcard.substring(6,12);
if(birstr != birth)
return false;
}
if(areacode && areacode.length>0){//验证地区编码部分,3或6位匹配
if(areacode.length == 6){
if(areacode != idcard.substring(0,6))
return false;
}
else if(areacode.length == 3){
if(areacode != idcard.substring(0,3))
return false;
}
}
if(sex){//验证性别部分,"M"代表男 "F"代表女 或者1代表男,2代表女
var sexnum = "";
if(idcard.length==18)
sexnum = idcard.substring(14,17);
else if(idcard.length==15)
sexnum = idcard.substring(11,14);
var sexint = parseInt(sexnum);
var sexmod = sexint%2;
if((sex == "M" || sex == 1) && sexmod == 0)
return false;
if((sex == "F" || sex == 2 ) && sexmod == 1)
return false;
}
return true;
}catch(e){
throw e;
}
};
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics