首頁 > web前端 > js教程 > 主體

jquery實作表單驗證簡單實例示範_jquery

WBOY
發布: 2016-05-16 15:30:28
原創
1262 人瀏覽過

本文實例講述了jquery實作表單驗證程式碼。分享給大家供大家參考。具體如下:
運行效果截圖如下:

具體程式碼如下:

直接上插件實現程式碼了,圍繞程式碼進行講解比較容易點:

/*
描述:基于jquery的表单验证插件。
*/

(function ($) {
  $.fn.checkForm = function (options) {
    var root = this; //将当前应用对象存入root

    var isok = false; //控制表单提交的开关

    var pwd1; //密码存储

    var defaults = {
      //图片路径
      img_error: "img/error.gif",
      img_success: "img/success.gif",

      //提示信息
      tips_success: '', //验证成功时的提示信息,默认为空
      tips_required: '不能为空',
      tips_email: '邮箱地址格式有误',
      tips_num: '请填写数字',
      tips_chinese: '请填写中文',
      tips_mobile: '手机号码格式有误',
      tips_idcard: '身份证号码格式有误',
      tips_pwdequal: '两次密码不一致',

      //正则
      reg_email: /^\w+\@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/i, //验证邮箱
      reg_num: /^\d+$/,                 //验证数字
      reg_chinese: /^[\u4E00-\u9FA5]+$/,         //验证中文
      reg_mobile: /^1[3458]{1}[0-9]{9}$/,        //验证手机
      reg_idcard: /^\d{14}\d{3}?\w$/           //验证身份证
    };

    //不为空则合并参数
    if(options)
      $.extend(defaults, options);

    //获取(文本框,密码框,多行文本框),当失去焦点时,对其进行数据验证
    $(":text,:password,textarea", root).each(function () {
      $(this).blur(function () {
        var _validate = $(this).attr("check"); //获取check属性的值
        if (_validate) {
          var arr = _validate.split(' '); //用空格将其拆分成数组
          for (var i = 0; i < arr.length; i++) {
            //逐个进行验证,不通过跳出返回false,通过则继续
            if (!check($(this), arr[i], $(this).val()))
              return false;
            else
              continue;
          }
        }
      })
    })

    //表单提交时执行验证,与上面的方法基本相同,只不过是在表单提交时触发
    function _onSubmit() {
      isok = true;
      $(":text,:password,textarea", root).each(function () {
        var _validate = $(this).attr("check");
        if (_validate) {
          var arr = _validate.split(' ');
          for (var i = 0; i < arr.length; i++) {
            if (!check($(this), arr[i], $(this).val())) {
              isok = false; //验证不通过阻止表单提交,开关false
              return; //跳出
            }
          }
        }
      });
    }

    //判断当前对象是否为表单,如果是表单,则提交时要进行验证
    if (root.is("form")) {
      root.submit(function () {
        _onSubmit();
        return isok;
      })
    }


    //验证方法
    var check = function (obj, _match, _val) {
       //根据验证情况,显示相应提示信息,返回相应的值
      switch (_match) {
        case 'required':
          return _val &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_required, false);
        case 'email':
          return chk(_val, defaults.reg_email) &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_email, false);
        case 'num':
          return chk(_val, defaults.reg_num) &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_num, false);
        case 'chinese':
          return chk(_val, defaults.reg_chinese) &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_chinese, false);
        case 'mobile':
          return chk(_val, defaults.reg_mobile) &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_mobile, false);
        case 'idcard':
          return chk(_val, defaults.reg_idcard) &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_idcard, false);
        case 'pwd1':
          pwd1 = _val; //实时获取存储pwd1值
          return true;
        case 'pwd2':
          return pwdEqual(_val, pwd1) &#63; showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_pwdequal, false);
        default:
          return true;
      }
    }


    //判断两次密码是否一致(返回bool值)
    var pwdEqual = function(val1, val2) {
      return val1 == val2 &#63; true : false;
    }


    //正则匹配(返回bool值)
    var chk = function (str, reg) {
      return reg.test(str);
    }

    //显示信息
    var showMsg = function (obj, msg, mark) {
      $(obj).next("#errormsg").remove();//先清除
      var _html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_error + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";
      if (mark)
        _html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_success + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";
      $(obj).after(_html);//再添加
      return mark;
    }
  }
})(jQuery);


登入後複製

  

先來說說實作原理:

       先定義好正規,且對應的提示訊息,

  加上自訂check屬性,

  接著取得check屬性的值,多個值用空格分開。利用split()將其拆分為數組,在逐一呼叫check()方法進行驗證。

  之後透過驗證的傳回值來決定顯示的資訊。

這裡有兩個驗證是比較特別的,就是:

1.驗證是否為空 (required)

2.兩次密碼是否一致 (pwd2)

這兩個都沒有用到正規,因為根本就用不上。 兩次密碼是否一致 ,單獨寫了個方法 pwdEqual();

插件裡的驗證正規我只寫了幾個 ,如果不夠用可以自行擴充添加。

擴充只需3步驟:

1.新增正規則,

2.新增對應提示訊息,

3.check()方法中加入對應 case 處理

 

外掛程式使用說明:

  1.給表單下要進行驗證的文字框,密碼框 ,多行文字方塊加上自訂check屬性

  2.多個格式驗證用空格間隔,如(同時驗證必填和郵箱): check="required email"

  3.如果要驗證兩次密碼是否一致,則pwd1和pwd2一起使用,如下圖:

pwd1儲存第一次輸入的值,pwd2儲存第二次輸入的值,如果你只用pwd1還好,但如果只用了pwd2,則驗證是始終無法通過的。

下面給出DEMO範例程式碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>表单验证插件</title>
</head>
<body>
  <form id="myform" method="post" action="success.html">
    <ul>
      <li>
      邮箱:<input type="text" name="email" check="required email" />
      </li>
      <li>
      密码:<input type="password" check="required pwd1" />
      </li>
      <li>
      确认密码:<input type="password" check="required pwd2" />
      </li>
      <li>
      手机:<input type="text" name="num" check="required mobile" />
      </li>
      <li>
      数字:<input type="text" name="num" check="required num" />
      </li>
      <li>
      地址:<textarea cols="5" rows="5" check="required"></textarea>
      </li>
      <li>
      不加check验证的文本框:<input type="text" name="num" />
      </li>
    </ul>
    <input type="submit" value="提交" />
  </form>
  <script src="js/jquery-1.4.4.min.js" type="text/javascript"></script>
  <script src="js/jquery.similar.checkForm.js" type="text/javascript"></script>
  <script type="text/javascript">
    $("#myform").checkForm();
  </script>
</body>
</html>
登入後複製

範例效果圖片:

範例程式碼,成功提交是會跳到success.html頁面的,因此你要自己建立個success.html,裡面可以什麼都不寫。

但是,只要有一個驗證不通過,就不會成功跳轉。

另外,你或許還需要2張圖片:

//圖片路徑
 img_error: "img/error.gif",
 img_success: "img/success.gif",

   上傳在這裡了,自己右鍵另存為吧。

以上就是本文的全部內容,希望能夠幫助大家找到更好的掌握jquery驗證碼的實作方法。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板