zoukankan      html  css  js  c++  java
  • jquery 最简单易用的表单验证插件

    代码如下:

    /*
    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" :/^[\Α-\¥]+$/,
    "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" : />|<|,|\[|\]|\{|\}|\?|\/|\+|=|\||\'|\\|\"|:|;|\~|\!|\@|\#|\*|\$|\%|\^|\&|\(|\)|`/i,
    "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 arg1<arg2 ? true:false;},
    "lte": function(arg1,arg2){ return arg1<=arg2 ? true:false;}
    },
    //简单验证提示信息后缀
    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("<span style='color:#F06' id='"+tipname(filedName)+"'> "+warnInfo+" </span>");
    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("<span style='color:#0C0' id='"+tipname(filedName)+"'> 正确 </span>");
    },
    //匹配对比值的提示名
    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 || len<min)) || (!max && len<min) ){
    showError(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://www.neatstudio.com/archives/?article-73.html
  • 相关阅读:
    QuickStart系列:docker部署之Gitlab本地代码仓库
    https环境搭建(本地搭建)
    docker搭建elk
    使用本机IP调试web项目
    VC++ 异常处理 __try __except的用法
    Delphi编程常用快捷键大全
    Delphi2007安装报Invalid Serial Number问题
    Cannot create file "C:UsersADMINI~1AppDataLocalTempEditorLineEnds.ttr"
    delphi 调试的时候变量全部显示Inaccessible value的解决办法
    Delphi idhttp解决获取UTF-8网页中文乱码问题
  • 原文地址:https://www.cnblogs.com/fogwang/p/2666590.html
Copyright © 2011-2022 走看看