复制代码 代码如下:
/*
jquery 表单验证插件
janchie 2010.1 janchie@163.com
1.01版
*/
(function($){
$.fn.extend({
valid:function(){
if( ! $(this).is(form) ) return;
//获取参数
var items = $.isarray(arguments[0]) ? arguments[0] : [],
isbindsubmit = typeof arguments[1] ===boolean ? arguments[1] :true,
isalert = typeof arguments[2] ===boolean ? arguments[2] :false,
//验证规则
rule = {
// 正则规则
eng : /^[a-za-z]+$/,
chn :/^[\u0391-\uffe5]+$/,
mail : /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
url : /^http[s]?:\/\/[a-za-z0-9]+\.[a-za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^\\])*$/,
currency : /^\d+(\.\d+)?$/,
number : /^\d+$/,
int : /^[0-9]{1,30}$/,
double : /^[-\+]?\d+(\.\d+)?$/,
username : /^[a-za-z]{1}([a-za-z0-9]|[._]){4,19}$/,
password : /^(\w){6,20}$/,
safe : />|dbc : /[a-za-z0-9!@#¥%^&*()_+{}[]|:"';.,/?<>`~ ]/,
qq : /[1-9][0-9]{4,}/,
date : /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/,
year : /^(19|20)[0-9]{2}$/,
month : /^(0?[1-9]|1[0-2])$/,
day : /^((0?[1-9])|((1|2)[0-9])|30|31)$/,
hour : /^((0?[1-9])|((1|2)[0-3]))$/,
minute : /^((0?[1-9])|((1|5)[0-9]))$/,
second : /^((0?[1-9])|((1|5)[0-9]))$/,
mobile : /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/,
phone : /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/,
zipcode : /^[1-9]\d{5}$/,
bodycard : /^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4}((19\d{2}(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(19\d{2}(0[13578]|1[02])31)|(19\d{2}02(0[1-9]|1\d|2[0-8]))|(19([13579][26]|[2468][048]|0[48])0229))\d{3}(\d|x|x)?$/,
ip : /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/,
file: /^[a-za-z0-9]+((\.|-)[a-za-z0-9]+)*\.[a-za-z0-9]+$/,
image : /.+\.(jpg|gif|png|bmp)$/i,
word : /.+\.(doc|rtf|pdf)$/i,
// 函数规则
eq: function(arg1,arg2){ return arg1==arg2 ? true:false;},
gt: function(arg1,arg2){ return arg1>arg2 ? true:false;},
gte: function(arg1,arg2){ return arg1>=arg2 ? true:false;},
lt: function(arg1,arg2){ return arg1lte: function(arg1,arg2){ return arg1},
//简单验证提示信息后缀
msgsuffix = {
eng : 只能输入英文 ,
chn : 只能输入汉字,
mail : 格式不正确,
url : 格式不正确,
currency : 数字格式有误,
number : 只能为数字,
int : 只能为整数,
double : 只能为带小数的数字,
username :只能为数字和英文及下划线和.的组合,开头为字母,4-20个字符,
password : 只能为数字和英文及下划线的组合,6-20个字符,
safe : 不能有特殊字符,
dbc : 不能有全角字符,
qq : 格式不正确,
date : 格式不正确,
year : 不正确,
month :不正确,
day : 不正确,
hour : 不正确,
minute :不正确,
second :不正确,
mobile : 格式不正确,
phone : 格式不正确,
zipcode : 格式不正确,
bodycard : 格式不正确,
ip : ip不正确,
file: 类型不正确,
image : 类型不正确,
word : 类型不正确,
eq: 不等于,
gt: 不大于,
gte: 不大于或等于,
lt: 不小于,
lte: 不小于或等于
},
msg = , formobj = $(this) , checkret = true, isall,
tipname = function(namestr){ return tip_ + namestr.replace(/([a-za-z0-9])/g,-$1); },
//规则类型匹配检测
typetest = function(){
var result = true,args = arguments;
if(rule.hasownproperty(args[0])){
var t = rule[args[0]], v = args[1];
result = args.length>2 ? t.apply(arguments,[].slice.call(args,1)):($.isfunction(t) ? t(v) :t.test(v));
}
return result;
},
//错误信息提示 ****** 自定义修改 ******
showerror = function(fieldobj,filedname,warninfo){
checkret = false;
fieldobj.css(background,#ffdfdd);
var tipobj = $(#+tipname(filedname));
if(tipobj.length>0) tipobj.remove();
var tipposition = fieldobj.next().length>0 ? fieldobj.nextall().eq(this.length-1):fieldobj.eq(this.length-1);
tipposition.after( +warninfo+ );
if(isalert && isall) msg += \n + warninfo;
//if(isalert && !isall) alert(warninfo);
},
//正确信息提示 ****** 自定义修改 ******
showright = function(fieldobj,filedname){
fieldobj.css(background,#ccffcc);
var tipobj = $(#+tipname(filedname));
if(tipobj.length>0) tipobj.remove();
var tipposition = fieldobj.next().length>0 ? fieldobj.nextall().eq(this.length-1):fieldobj.eq(this.length-1);
tipposition.after( 正确 );
},
//匹配对比值的提示名
findto = function(objname){
var find;
$.each(items, function(){
if(this.name == objname && this.simple){
find = this.simple; return false;
}
});
if(!find) find = $([name='+objname+'])[0].name;
return find;
},
//单元素验证
fieldcheck = function(item){
var i = item, field = $([name='+i.name+'],formobj[0]);
if(!field[0]) return;
var warnmsg,fv = $.trim(field.val()),isrq = typeof i.require ===boolean ? i.require : true;
if( isrq && ((field.is(:radio)|| field.is(:checkbox)) && !field.is(:checked))){
warnmsg = i.message|| i.simple + 没有选择;
showerror(field ,i.name, warnmsg);
}else if (isrq && fv == ){
warnmsg = i.message|| i.simple + ( field.is(select) ? 没有选择 :不能为空 );
showerror(field ,i.name, warnmsg);
}else if(fv != ){
if(i.min || i.max){
var len = fv.length, min = i.min || 0, max = i.max;
warnmsg = i.message || (max? i.simple + 长度范围应在+min+~+max+之间:i.simple + 长度应大于+min);
if( (max && (len>max || lenshowerror(field ,i.name, warnmsg); return;
}
}
if(i.type){
var matchval = i.to ? $.trim($([name='+i.to+']).val()) :i.value;
var matchret = matchval ? typetest(i.type,fv,matchval) :typetest(i.type,fv);
warnmsg = i.message|| i.simple + msgsuffix[i.type];
if(matchval && i.simple) warnmsg += (i.to ? findto(i.to) +的值 :i.value);
if(!matchret) showerror(field ,i.name, warnmsg);
else showright(field,i.name);
}else{
showright(field,i.name);
}
}else if (isrq){
showright(field,i.name);
}
},
//元素组验证
validate = function(){
$.each(items, function(){isall=true; fieldcheck(this);});
if(isalert && msg != ){
alert(msg); msg = ;
}
return checkret;
};
//单元素事件绑定
$.each(items, function(){
var field = $([name='+this.name+'],formobj[0]);
if(field.is(:hidden)) return;
var obj = this,tocheck = function(){ isall=false; fieldcheck(obj);};
if(field.is(:file) || field.is(select)){
field.change(tocheck);
}else{
field.blur(tocheck);
}
});
//提交事件绑定
if(isbindsubmit) {
$(this).submit(validate);
}else{
return validate();
}
}
});
})(jquery);
参数及说明:
------------------- 配置参数:----------------------
-------- 表单 --------
valid(fileds,isbindsubmit,isalert)
参数一为表单项数组(json方式),必需
参数二为表单是否为手动调用验证结果,默认为true,即为自动验证submit事件,可选;
参数三为验证信息采用alert提示方式,默认为否,可选。
-------- 表单项数组 --------
name: 表单域的name,必需
type: 验证类型,可选
simple: 简单提示消息,只输入域的中文名 [推荐]
message: 完整的提示消息,替代简单提示消息
require:是否必填,默认为true,即必填,false为非必填,可选
to: 匹配值对比,对象的name,可选
value: 直接匹配值对比,有to则该值被忽略,可选
min:最小长度,可选
max:最大长度,可选
ajax: 为取得异步验证的结果的地址,可选
****** type验证类型如下: ******
eng: 英文
chn: 汉字
mail: 邮箱
url: 网址
currency: 货币
number: 数字
int: 整数
double: 浮点数
username:数字和英文及下划线和.的组合,开头为字母,4-20个字符
password: 数字和英文及下划线的组合,6-20个字符
safe:不含特殊字符
dbc: 含全角字符(汉字除外)
qq: 5-9位数字
date: 时间
year: 年
month:月
day: 日
hour: 小时
minute:分
second 秒
mobile:手机
phone:电话
zipcode: 邮编
bodycard: 身份证,支持15位、18位,x字母
ip: ip
file: 文件类型
image: 图片文件类型
word: 文档文件类型
**** 以下类型,需要有匹配对象或值 ****
eq: =
gt: >
gte:>=
lt: lte:怎么个简单容易法???
看代码:
复制代码 代码如下:
$(function(){
$(form).valid([
//验证选择
{ name:checkbox,simple:多选 },
//验证必填,只要不为空
{ name:username,simple:用户名 },
//非必填,邮箱类型
{ name:email,type:mail,simple:邮箱,require:false }
]);
})
演示代码打包下载 http://xiazai.jb51.net/201002/yuanma/jquery_checkform.rar